diff --git a/Package.swift b/Package.swift index f6379b33341..151732273ea 100644 --- a/Package.swift +++ b/Package.swift @@ -108,7 +108,7 @@ func addServiceTarget(_ name: String) { // MARK: - Generated addDependencies( - clientRuntimeVersion: "0.17.0", + clientRuntimeVersion: "0.18.0", crtVersion: "0.9.0" ) diff --git a/Package.version b/Package.version index 0548fb4e9b2..7092c7c46f8 100644 --- a/Package.version +++ b/Package.version @@ -1 +1 @@ -0.14.0 \ No newline at end of file +0.15.0 \ No newline at end of file diff --git a/Sources/Services/AWSAccount/EndpointResolver.swift b/Sources/Services/AWSAccount/EndpointResolver.swift index a4dd9fb7b22..ebbaaea8e23 100644 --- a/Sources/Services/AWSAccount/EndpointResolver.swift +++ b/Sources/Services/AWSAccount/EndpointResolver.swift @@ -35,7 +35,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://account.us-east-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"account\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-cn\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://account.cn-northwest-1.amazonaws.com.cn\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"cn-northwest-1\",\"signingName\":\"account\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://account-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://account-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://account.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://account.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" + private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://account.us-east-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"account\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-cn\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://account.cn-northwest-1.amazonaws.com.cn\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"account\",\"signingRegion\":\"cn-northwest-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://account-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://account-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://account.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://account.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSAppflow/AppflowClient.swift b/Sources/Services/AWSAppflow/AppflowClient.swift index e59dfb7045a..77a1819f165 100644 --- a/Sources/Services/AWSAppflow/AppflowClient.swift +++ b/Sources/Services/AWSAppflow/AppflowClient.swift @@ -147,6 +147,14 @@ extension AppflowClient: AppflowClientProtocol { .withSigningName(value: "appflow") .withSigningRegion(value: config.signingRegion) var operation = ClientRuntime.OperationStack(id: "createConnectorProfile") + operation.initializeStep.intercept(position: .after, id: "IdempotencyTokenMiddleware") { (context, input, next) -> ClientRuntime.OperationOutput in + let idempotencyTokenGenerator = context.getIdempotencyTokenGenerator() + var copiedInput = input + if input.clientToken == nil { + copiedInput.clientToken = idempotencyTokenGenerator.generateToken() + } + return try await next.handle(context: context, input: copiedInput) + } operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) 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) @@ -182,6 +190,14 @@ extension AppflowClient: AppflowClientProtocol { .withSigningName(value: "appflow") .withSigningRegion(value: config.signingRegion) var operation = ClientRuntime.OperationStack(id: "createFlow") + operation.initializeStep.intercept(position: .after, id: "IdempotencyTokenMiddleware") { (context, input, next) -> ClientRuntime.OperationOutput in + let idempotencyTokenGenerator = context.getIdempotencyTokenGenerator() + var copiedInput = input + if input.clientToken == nil { + copiedInput.clientToken = idempotencyTokenGenerator.generateToken() + } + return try await next.handle(context: context, input: copiedInput) + } operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) 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) @@ -634,6 +650,14 @@ extension AppflowClient: AppflowClientProtocol { .withSigningName(value: "appflow") .withSigningRegion(value: config.signingRegion) var operation = ClientRuntime.OperationStack(id: "registerConnector") + operation.initializeStep.intercept(position: .after, id: "IdempotencyTokenMiddleware") { (context, input, next) -> ClientRuntime.OperationOutput in + let idempotencyTokenGenerator = context.getIdempotencyTokenGenerator() + var copiedInput = input + if input.clientToken == nil { + copiedInput.clientToken = idempotencyTokenGenerator.generateToken() + } + return try await next.handle(context: context, input: copiedInput) + } operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) 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) @@ -669,6 +693,14 @@ extension AppflowClient: AppflowClientProtocol { .withSigningName(value: "appflow") .withSigningRegion(value: config.signingRegion) var operation = ClientRuntime.OperationStack(id: "startFlow") + operation.initializeStep.intercept(position: .after, id: "IdempotencyTokenMiddleware") { (context, input, next) -> ClientRuntime.OperationOutput in + let idempotencyTokenGenerator = context.getIdempotencyTokenGenerator() + var copiedInput = input + if input.clientToken == nil { + copiedInput.clientToken = idempotencyTokenGenerator.generateToken() + } + return try await next.handle(context: context, input: copiedInput) + } operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) 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) @@ -842,6 +874,14 @@ extension AppflowClient: AppflowClientProtocol { .withSigningName(value: "appflow") .withSigningRegion(value: config.signingRegion) var operation = ClientRuntime.OperationStack(id: "updateConnectorProfile") + operation.initializeStep.intercept(position: .after, id: "IdempotencyTokenMiddleware") { (context, input, next) -> ClientRuntime.OperationOutput in + let idempotencyTokenGenerator = context.getIdempotencyTokenGenerator() + var copiedInput = input + if input.clientToken == nil { + copiedInput.clientToken = idempotencyTokenGenerator.generateToken() + } + return try await next.handle(context: context, input: copiedInput) + } operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) 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) @@ -881,6 +921,14 @@ extension AppflowClient: AppflowClientProtocol { .withSigningName(value: "appflow") .withSigningRegion(value: config.signingRegion) var operation = ClientRuntime.OperationStack(id: "updateConnectorRegistration") + operation.initializeStep.intercept(position: .after, id: "IdempotencyTokenMiddleware") { (context, input, next) -> ClientRuntime.OperationOutput in + let idempotencyTokenGenerator = context.getIdempotencyTokenGenerator() + var copiedInput = input + if input.clientToken == nil { + copiedInput.clientToken = idempotencyTokenGenerator.generateToken() + } + return try await next.handle(context: context, input: copiedInput) + } operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) 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) @@ -916,6 +964,14 @@ extension AppflowClient: AppflowClientProtocol { .withSigningName(value: "appflow") .withSigningRegion(value: config.signingRegion) var operation = ClientRuntime.OperationStack(id: "updateFlow") + operation.initializeStep.intercept(position: .after, id: "IdempotencyTokenMiddleware") { (context, input, next) -> ClientRuntime.OperationOutput in + let idempotencyTokenGenerator = context.getIdempotencyTokenGenerator() + var copiedInput = input + if input.clientToken == nil { + copiedInput.clientToken = idempotencyTokenGenerator.generateToken() + } + return try await next.handle(context: context, input: copiedInput) + } operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) 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) diff --git a/Sources/Services/AWSAppflow/models/Models.swift b/Sources/Services/AWSAppflow/models/Models.swift index 956a0952370..7e738d7b9e3 100644 --- a/Sources/Services/AWSAppflow/models/Models.swift +++ b/Sources/Services/AWSAppflow/models/Models.swift @@ -2930,6 +2930,7 @@ extension AppflowClientTypes { extension CreateConnectorProfileInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case clientToken case connectionMode case connectorLabel case connectorProfileConfig @@ -2940,6 +2941,9 @@ extension CreateConnectorProfileInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let clientToken = self.clientToken { + try encodeContainer.encode(clientToken, forKey: .clientToken) + } if let connectionMode = self.connectionMode { try encodeContainer.encode(connectionMode.rawValue, forKey: .connectionMode) } @@ -2968,6 +2972,8 @@ extension CreateConnectorProfileInput: ClientRuntime.URLPathProvider { } public struct CreateConnectorProfileInput: Swift.Equatable { + /// The clientToken parameter is an idempotency token. It ensures that your CreateConnectorProfile request completes only once. You choose the value to pass. For example, if you don't receive a response from your request, you can safely retry the request with the same clientToken parameter value. If you omit a clientToken value, the Amazon Web Services SDK that you are using inserts a value for you. This way, the SDK can safely retry requests multiple times after a network error. You must provide your own value for other use cases. If you specify input parameters that differ from your first request, an error occurs. If you use a different value for clientToken, Amazon AppFlow considers it a new call to CreateConnectorProfile. The token is active for 8 hours. + public var clientToken: Swift.String? /// Indicates the connection mode and specifies whether it is public or private. Private flows use Amazon Web Services PrivateLink to route data over Amazon Web Services infrastructure without exposing it to the public internet. /// This member is required. public var connectionMode: AppflowClientTypes.ConnectionMode? @@ -2986,6 +2992,7 @@ public struct CreateConnectorProfileInput: Swift.Equatable { public var kmsArn: Swift.String? public init ( + clientToken: Swift.String? = nil, connectionMode: AppflowClientTypes.ConnectionMode? = nil, connectorLabel: Swift.String? = nil, connectorProfileConfig: AppflowClientTypes.ConnectorProfileConfig? = nil, @@ -2994,6 +3001,7 @@ public struct CreateConnectorProfileInput: Swift.Equatable { kmsArn: Swift.String? = nil ) { + self.clientToken = clientToken self.connectionMode = connectionMode self.connectorLabel = connectorLabel self.connectorProfileConfig = connectorProfileConfig @@ -3010,10 +3018,12 @@ struct CreateConnectorProfileInputBody: Swift.Equatable { let connectorLabel: Swift.String? let connectionMode: AppflowClientTypes.ConnectionMode? let connectorProfileConfig: AppflowClientTypes.ConnectorProfileConfig? + let clientToken: Swift.String? } extension CreateConnectorProfileInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case clientToken case connectionMode case connectorLabel case connectorProfileConfig @@ -3036,6 +3046,8 @@ extension CreateConnectorProfileInputBody: Swift.Decodable { connectionMode = connectionModeDecoded let connectorProfileConfigDecoded = try containerValues.decodeIfPresent(AppflowClientTypes.ConnectorProfileConfig.self, forKey: .connectorProfileConfig) connectorProfileConfig = connectorProfileConfigDecoded + let clientTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .clientToken) + clientToken = clientTokenDecoded } } @@ -3112,6 +3124,7 @@ extension CreateConnectorProfileOutputResponseBody: Swift.Decodable { extension CreateFlowInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case clientToken case description case destinationFlowConfigList case flowName @@ -3125,6 +3138,9 @@ extension CreateFlowInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let clientToken = self.clientToken { + try encodeContainer.encode(clientToken, forKey: .clientToken) + } if let description = self.description { try encodeContainer.encode(description, forKey: .description) } @@ -3171,6 +3187,8 @@ extension CreateFlowInput: ClientRuntime.URLPathProvider { } public struct CreateFlowInput: Swift.Equatable { + /// The clientToken parameter is an idempotency token. It ensures that your CreateFlow request completes only once. You choose the value to pass. For example, if you don't receive a response from your request, you can safely retry the request with the same clientToken parameter value. If you omit a clientToken value, the Amazon Web Services SDK that you are using inserts a value for you. This way, the SDK can safely retry requests multiple times after a network error. You must provide your own value for other use cases. If you specify input parameters that differ from your first request, an error occurs. If you use a different value for clientToken, Amazon AppFlow considers it a new call to CreateFlow. The token is active for 8 hours. + public var clientToken: Swift.String? /// A description of the flow you want to create. public var description: Swift.String? /// The configuration that controls how Amazon AppFlow places data in the destination connector. @@ -3196,6 +3214,7 @@ public struct CreateFlowInput: Swift.Equatable { public var triggerConfig: AppflowClientTypes.TriggerConfig? public init ( + clientToken: Swift.String? = nil, description: Swift.String? = nil, destinationFlowConfigList: [AppflowClientTypes.DestinationFlowConfig]? = nil, flowName: Swift.String? = nil, @@ -3207,6 +3226,7 @@ public struct CreateFlowInput: Swift.Equatable { triggerConfig: AppflowClientTypes.TriggerConfig? = nil ) { + self.clientToken = clientToken self.description = description self.destinationFlowConfigList = destinationFlowConfigList self.flowName = flowName @@ -3229,10 +3249,12 @@ struct CreateFlowInputBody: Swift.Equatable { let tasks: [AppflowClientTypes.Task]? let tags: [Swift.String:Swift.String]? let metadataCatalogConfig: AppflowClientTypes.MetadataCatalogConfig? + let clientToken: Swift.String? } extension CreateFlowInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case clientToken case description case destinationFlowConfigList case flowName @@ -3291,6 +3313,8 @@ extension CreateFlowInputBody: Swift.Decodable { tags = tagsDecoded0 let metadataCatalogConfigDecoded = try containerValues.decodeIfPresent(AppflowClientTypes.MetadataCatalogConfig.self, forKey: .metadataCatalogConfig) metadataCatalogConfig = metadataCatalogConfigDecoded + let clientTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .clientToken) + clientToken = clientTokenDecoded } } @@ -10329,6 +10353,7 @@ extension AppflowClientTypes { extension RegisterConnectorInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case clientToken case connectorLabel case connectorProvisioningConfig case connectorProvisioningType @@ -10337,6 +10362,9 @@ extension RegisterConnectorInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let clientToken = self.clientToken { + try encodeContainer.encode(clientToken, forKey: .clientToken) + } if let connectorLabel = self.connectorLabel { try encodeContainer.encode(connectorLabel, forKey: .connectorLabel) } @@ -10359,6 +10387,8 @@ extension RegisterConnectorInput: ClientRuntime.URLPathProvider { } public struct RegisterConnectorInput: Swift.Equatable { + /// The clientToken parameter is an idempotency token. It ensures that your RegisterConnector request completes only once. You choose the value to pass. For example, if you don't receive a response from your request, you can safely retry the request with the same clientToken parameter value. If you omit a clientToken value, the Amazon Web Services SDK that you are using inserts a value for you. This way, the SDK can safely retry requests multiple times after a network error. You must provide your own value for other use cases. If you specify input parameters that differ from your first request, an error occurs. If you use a different value for clientToken, Amazon AppFlow considers it a new call to RegisterConnector. The token is active for 8 hours. + public var clientToken: Swift.String? /// The name of the connector. The name is unique for each ConnectorRegistration in your Amazon Web Services account. public var connectorLabel: Swift.String? /// The provisioning type of the connector. Currently the only supported value is LAMBDA. @@ -10369,12 +10399,14 @@ public struct RegisterConnectorInput: Swift.Equatable { public var description: Swift.String? public init ( + clientToken: Swift.String? = nil, connectorLabel: Swift.String? = nil, connectorProvisioningConfig: AppflowClientTypes.ConnectorProvisioningConfig? = nil, connectorProvisioningType: AppflowClientTypes.ConnectorProvisioningType? = nil, description: Swift.String? = nil ) { + self.clientToken = clientToken self.connectorLabel = connectorLabel self.connectorProvisioningConfig = connectorProvisioningConfig self.connectorProvisioningType = connectorProvisioningType @@ -10387,10 +10419,12 @@ struct RegisterConnectorInputBody: Swift.Equatable { let description: Swift.String? let connectorProvisioningType: AppflowClientTypes.ConnectorProvisioningType? let connectorProvisioningConfig: AppflowClientTypes.ConnectorProvisioningConfig? + let clientToken: Swift.String? } extension RegisterConnectorInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case clientToken case connectorLabel case connectorProvisioningConfig case connectorProvisioningType @@ -10407,6 +10441,8 @@ extension RegisterConnectorInputBody: Swift.Decodable { connectorProvisioningType = connectorProvisioningTypeDecoded let connectorProvisioningConfigDecoded = try containerValues.decodeIfPresent(AppflowClientTypes.ConnectorProvisioningConfig.self, forKey: .connectorProvisioningConfig) connectorProvisioningConfig = connectorProvisioningConfigDecoded + let clientTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .clientToken) + clientToken = clientTokenDecoded } } @@ -13303,11 +13339,15 @@ extension AppflowClientTypes { extension StartFlowInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case clientToken case flowName } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let clientToken = self.clientToken { + try encodeContainer.encode(clientToken, forKey: .clientToken) + } if let flowName = self.flowName { try encodeContainer.encode(flowName, forKey: .flowName) } @@ -13321,24 +13361,30 @@ extension StartFlowInput: ClientRuntime.URLPathProvider { } public struct StartFlowInput: Swift.Equatable { + /// The clientToken parameter is an idempotency token. It ensures that your StartFlow request completes only once. You choose the value to pass. For example, if you don't receive a response from your request, you can safely retry the request with the same clientToken parameter value. If you omit a clientToken value, the Amazon Web Services SDK that you are using inserts a value for you. This way, the SDK can safely retry requests multiple times after a network error. You must provide your own value for other use cases. If you specify input parameters that differ from your first request, an error occurs for flows that run on a schedule or based on an event. However, the error doesn't occur for flows that run on demand. You set the conditions that initiate your flow for the triggerConfig parameter. If you use a different value for clientToken, Amazon AppFlow considers it a new call to StartFlow. The token is active for 8 hours. + public var clientToken: Swift.String? /// The specified name of the flow. Spaces are not allowed. Use underscores (_) or hyphens (-) only. /// This member is required. public var flowName: Swift.String? public init ( + clientToken: Swift.String? = nil, flowName: Swift.String? = nil ) { + self.clientToken = clientToken self.flowName = flowName } } struct StartFlowInputBody: Swift.Equatable { let flowName: Swift.String? + let clientToken: Swift.String? } extension StartFlowInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case clientToken case flowName } @@ -13346,6 +13392,8 @@ extension StartFlowInputBody: Swift.Decodable { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let flowNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowName) flowName = flowNameDecoded + let clientTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .clientToken) + clientToken = clientTokenDecoded } } @@ -14499,6 +14547,7 @@ public struct UntagResourceOutputResponse: Swift.Equatable { extension UpdateConnectorProfileInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case clientToken case connectionMode case connectorProfileConfig case connectorProfileName @@ -14506,6 +14555,9 @@ extension UpdateConnectorProfileInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let clientToken = self.clientToken { + try encodeContainer.encode(clientToken, forKey: .clientToken) + } if let connectionMode = self.connectionMode { try encodeContainer.encode(connectionMode.rawValue, forKey: .connectionMode) } @@ -14525,6 +14577,8 @@ extension UpdateConnectorProfileInput: ClientRuntime.URLPathProvider { } public struct UpdateConnectorProfileInput: Swift.Equatable { + /// The clientToken parameter is an idempotency token. It ensures that your UpdateConnectorProfile request completes only once. You choose the value to pass. For example, if you don't receive a response from your request, you can safely retry the request with the same clientToken parameter value. If you omit a clientToken value, the Amazon Web Services SDK that you are using inserts a value for you. This way, the SDK can safely retry requests multiple times after a network error. You must provide your own value for other use cases. If you specify input parameters that differ from your first request, an error occurs. If you use a different value for clientToken, Amazon AppFlow considers it a new call to UpdateConnectorProfile. The token is active for 8 hours. + public var clientToken: Swift.String? /// Indicates the connection mode and if it is public or private. /// This member is required. public var connectionMode: AppflowClientTypes.ConnectionMode? @@ -14536,11 +14590,13 @@ public struct UpdateConnectorProfileInput: Swift.Equatable { public var connectorProfileName: Swift.String? public init ( + clientToken: Swift.String? = nil, connectionMode: AppflowClientTypes.ConnectionMode? = nil, connectorProfileConfig: AppflowClientTypes.ConnectorProfileConfig? = nil, connectorProfileName: Swift.String? = nil ) { + self.clientToken = clientToken self.connectionMode = connectionMode self.connectorProfileConfig = connectorProfileConfig self.connectorProfileName = connectorProfileName @@ -14551,10 +14607,12 @@ struct UpdateConnectorProfileInputBody: Swift.Equatable { let connectorProfileName: Swift.String? let connectionMode: AppflowClientTypes.ConnectionMode? let connectorProfileConfig: AppflowClientTypes.ConnectorProfileConfig? + let clientToken: Swift.String? } extension UpdateConnectorProfileInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case clientToken case connectionMode case connectorProfileConfig case connectorProfileName @@ -14568,6 +14626,8 @@ extension UpdateConnectorProfileInputBody: Swift.Decodable { connectionMode = connectionModeDecoded let connectorProfileConfigDecoded = try containerValues.decodeIfPresent(AppflowClientTypes.ConnectorProfileConfig.self, forKey: .connectorProfileConfig) connectorProfileConfig = connectorProfileConfigDecoded + let clientTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .clientToken) + clientToken = clientTokenDecoded } } @@ -14644,6 +14704,7 @@ extension UpdateConnectorProfileOutputResponseBody: Swift.Decodable { extension UpdateConnectorRegistrationInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case clientToken case connectorLabel case connectorProvisioningConfig case description @@ -14651,6 +14712,9 @@ extension UpdateConnectorRegistrationInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let clientToken = self.clientToken { + try encodeContainer.encode(clientToken, forKey: .clientToken) + } if let connectorLabel = self.connectorLabel { try encodeContainer.encode(connectorLabel, forKey: .connectorLabel) } @@ -14670,6 +14734,8 @@ extension UpdateConnectorRegistrationInput: ClientRuntime.URLPathProvider { } public struct UpdateConnectorRegistrationInput: Swift.Equatable { + /// The clientToken parameter is an idempotency token. It ensures that your UpdateConnectorRegistration request completes only once. You choose the value to pass. For example, if you don't receive a response from your request, you can safely retry the request with the same clientToken parameter value. If you omit a clientToken value, the Amazon Web Services SDK that you are using inserts a value for you. This way, the SDK can safely retry requests multiple times after a network error. You must provide your own value for other use cases. If you specify input parameters that differ from your first request, an error occurs. If you use a different value for clientToken, Amazon AppFlow considers it a new call to UpdateConnectorRegistration. The token is active for 8 hours. + public var clientToken: Swift.String? /// The name of the connector. The name is unique for each connector registration in your AWS account. /// This member is required. public var connectorLabel: Swift.String? @@ -14679,11 +14745,13 @@ public struct UpdateConnectorRegistrationInput: Swift.Equatable { public var description: Swift.String? public init ( + clientToken: Swift.String? = nil, connectorLabel: Swift.String? = nil, connectorProvisioningConfig: AppflowClientTypes.ConnectorProvisioningConfig? = nil, description: Swift.String? = nil ) { + self.clientToken = clientToken self.connectorLabel = connectorLabel self.connectorProvisioningConfig = connectorProvisioningConfig self.description = description @@ -14694,10 +14762,12 @@ struct UpdateConnectorRegistrationInputBody: Swift.Equatable { let connectorLabel: Swift.String? let description: Swift.String? let connectorProvisioningConfig: AppflowClientTypes.ConnectorProvisioningConfig? + let clientToken: Swift.String? } extension UpdateConnectorRegistrationInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case clientToken case connectorLabel case connectorProvisioningConfig case description @@ -14711,6 +14781,8 @@ extension UpdateConnectorRegistrationInputBody: Swift.Decodable { description = descriptionDecoded let connectorProvisioningConfigDecoded = try containerValues.decodeIfPresent(AppflowClientTypes.ConnectorProvisioningConfig.self, forKey: .connectorProvisioningConfig) connectorProvisioningConfig = connectorProvisioningConfigDecoded + let clientTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .clientToken) + clientToken = clientTokenDecoded } } @@ -14795,6 +14867,7 @@ extension UpdateConnectorRegistrationOutputResponseBody: Swift.Decodable { extension UpdateFlowInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case clientToken case description case destinationFlowConfigList case flowName @@ -14806,6 +14879,9 @@ extension UpdateFlowInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let clientToken = self.clientToken { + try encodeContainer.encode(clientToken, forKey: .clientToken) + } if let description = self.description { try encodeContainer.encode(description, forKey: .description) } @@ -14843,6 +14919,8 @@ extension UpdateFlowInput: ClientRuntime.URLPathProvider { } public struct UpdateFlowInput: Swift.Equatable { + /// The clientToken parameter is an idempotency token. It ensures that your UpdateFlow request completes only once. You choose the value to pass. For example, if you don't receive a response from your request, you can safely retry the request with the same clientToken parameter value. If you omit a clientToken value, the Amazon Web Services SDK that you are using inserts a value for you. This way, the SDK can safely retry requests multiple times after a network error. You must provide your own value for other use cases. If you specify input parameters that differ from your first request, an error occurs. If you use a different value for clientToken, Amazon AppFlow considers it a new call to UpdateFlow. The token is active for 8 hours. + public var clientToken: Swift.String? /// A description of the flow. public var description: Swift.String? /// The configuration that controls how Amazon AppFlow transfers data to the destination connector. @@ -14864,6 +14942,7 @@ public struct UpdateFlowInput: Swift.Equatable { public var triggerConfig: AppflowClientTypes.TriggerConfig? public init ( + clientToken: Swift.String? = nil, description: Swift.String? = nil, destinationFlowConfigList: [AppflowClientTypes.DestinationFlowConfig]? = nil, flowName: Swift.String? = nil, @@ -14873,6 +14952,7 @@ public struct UpdateFlowInput: Swift.Equatable { triggerConfig: AppflowClientTypes.TriggerConfig? = nil ) { + self.clientToken = clientToken self.description = description self.destinationFlowConfigList = destinationFlowConfigList self.flowName = flowName @@ -14891,10 +14971,12 @@ struct UpdateFlowInputBody: Swift.Equatable { let destinationFlowConfigList: [AppflowClientTypes.DestinationFlowConfig]? let tasks: [AppflowClientTypes.Task]? let metadataCatalogConfig: AppflowClientTypes.MetadataCatalogConfig? + let clientToken: Swift.String? } extension UpdateFlowInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case clientToken case description case destinationFlowConfigList case flowName @@ -14938,6 +15020,8 @@ extension UpdateFlowInputBody: Swift.Decodable { tasks = tasksDecoded0 let metadataCatalogConfigDecoded = try containerValues.decodeIfPresent(AppflowClientTypes.MetadataCatalogConfig.self, forKey: .metadataCatalogConfig) metadataCatalogConfig = metadataCatalogConfigDecoded + let clientTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .clientToken) + clientToken = clientTokenDecoded } } diff --git a/Sources/Services/AWSBillingconductor/EndpointResolver.swift b/Sources/Services/AWSBillingconductor/EndpointResolver.swift index 3111aef0a0b..c511c6c31e6 100644 --- a/Sources/Services/AWSBillingconductor/EndpointResolver.swift +++ b/Sources/Services/AWSBillingconductor/EndpointResolver.swift @@ -35,7 +35,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://billingconductor.us-east-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"billingconductor\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://billingconductor-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://billingconductor-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://billingconductor.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://billingconductor.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" + private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://billingconductor.us-east-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"billingconductor\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://billingconductor-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://billingconductor-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://billingconductor.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://billingconductor.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSBudgets/EndpointResolver.swift b/Sources/Services/AWSBudgets/EndpointResolver.swift index bb501a78777..1036117d354 100644 --- a/Sources/Services/AWSBudgets/EndpointResolver.swift +++ b/Sources/Services/AWSBudgets/EndpointResolver.swift @@ -35,7 +35,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://budgets.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"budgets\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-cn\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://budgets.amazonaws.com.cn\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"cn-northwest-1\",\"signingName\":\"budgets\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://budgets-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://budgets-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://budgets.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://budgets.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" + private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://budgets.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"budgets\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-cn\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://budgets.amazonaws.com.cn\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"budgets\",\"signingRegion\":\"cn-northwest-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://budgets-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://budgets-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://budgets.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://budgets.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSChime/EndpointResolver.swift b/Sources/Services/AWSChime/EndpointResolver.swift index 84822b19b54..35844e9ecf4 100644 --- a/Sources/Services/AWSChime/EndpointResolver.swift +++ b/Sources/Services/AWSChime/EndpointResolver.swift @@ -35,7 +35,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://chime.us-east-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"chime\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://chime-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://chime-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://chime.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://chime.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" + private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://chime.us-east-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"chime\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://chime-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://chime-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://chime.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://chime.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSChimeSDKVoice/models/Models.swift b/Sources/Services/AWSChimeSDKVoice/models/Models.swift index 4f695e24fd4..a3838ca2ea4 100644 --- a/Sources/Services/AWSChimeSDKVoice/models/Models.swift +++ b/Sources/Services/AWSChimeSDKVoice/models/Models.swift @@ -1819,6 +1819,7 @@ extension CreateSipMediaApplicationInput: Swift.Encodable { case awsRegion = "AwsRegion" case endpoints = "Endpoints" case name = "Name" + case tags = "Tags" } public func encode(to encoder: Swift.Encoder) throws { @@ -1835,6 +1836,12 @@ extension CreateSipMediaApplicationInput: Swift.Encodable { if let name = self.name { try encodeContainer.encode(name, forKey: .name) } + if let tags = tags { + var tagsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .tags) + for tag0 in tags { + try tagsContainer.encode(tag0) + } + } } } @@ -1854,16 +1861,20 @@ public struct CreateSipMediaApplicationInput: Swift.Equatable { /// The SIP media application's name. /// This member is required. public var name: Swift.String? + /// The tags assigned to the SIP media application. + public var tags: [ChimeSDKVoiceClientTypes.Tag]? public init ( awsRegion: Swift.String? = nil, endpoints: [ChimeSDKVoiceClientTypes.SipMediaApplicationEndpoint]? = nil, - name: Swift.String? = nil + name: Swift.String? = nil, + tags: [ChimeSDKVoiceClientTypes.Tag]? = nil ) { self.awsRegion = awsRegion self.endpoints = endpoints self.name = name + self.tags = tags } } @@ -1871,6 +1882,7 @@ struct CreateSipMediaApplicationInputBody: Swift.Equatable { let awsRegion: Swift.String? let name: Swift.String? let endpoints: [ChimeSDKVoiceClientTypes.SipMediaApplicationEndpoint]? + let tags: [ChimeSDKVoiceClientTypes.Tag]? } extension CreateSipMediaApplicationInputBody: Swift.Decodable { @@ -1878,6 +1890,7 @@ extension CreateSipMediaApplicationInputBody: Swift.Decodable { case awsRegion = "AwsRegion" case endpoints = "Endpoints" case name = "Name" + case tags = "Tags" } public init (from decoder: Swift.Decoder) throws { @@ -1897,6 +1910,17 @@ extension CreateSipMediaApplicationInputBody: Swift.Decodable { } } endpoints = endpointsDecoded0 + let tagsContainer = try containerValues.decodeIfPresent([ChimeSDKVoiceClientTypes.Tag?].self, forKey: .tags) + var tagsDecoded0:[ChimeSDKVoiceClientTypes.Tag]? = nil + if let tagsContainer = tagsContainer { + tagsDecoded0 = [ChimeSDKVoiceClientTypes.Tag]() + for structure0 in tagsContainer { + if let structure0 = structure0 { + tagsDecoded0?.append(structure0) + } + } + } + tags = tagsDecoded0 } } @@ -2322,6 +2346,7 @@ extension CreateVoiceConnectorInput: Swift.Encodable { case awsRegion = "AwsRegion" case name = "Name" case requireEncryption = "RequireEncryption" + case tags = "Tags" } public func encode(to encoder: Swift.Encoder) throws { @@ -2335,6 +2360,12 @@ extension CreateVoiceConnectorInput: Swift.Encodable { if let requireEncryption = self.requireEncryption { try encodeContainer.encode(requireEncryption, forKey: .requireEncryption) } + if let tags = tags { + var tagsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .tags) + for tag0 in tags { + try tagsContainer.encode(tag0) + } + } } } @@ -2353,16 +2384,20 @@ public struct CreateVoiceConnectorInput: Swift.Equatable { /// Enables or disables encryption for the Voice Connector. /// This member is required. public var requireEncryption: Swift.Bool? + /// The tags assigned to the Voice Connector. + public var tags: [ChimeSDKVoiceClientTypes.Tag]? public init ( awsRegion: ChimeSDKVoiceClientTypes.VoiceConnectorAwsRegion? = nil, name: Swift.String? = nil, - requireEncryption: Swift.Bool? = nil + requireEncryption: Swift.Bool? = nil, + tags: [ChimeSDKVoiceClientTypes.Tag]? = nil ) { self.awsRegion = awsRegion self.name = name self.requireEncryption = requireEncryption + self.tags = tags } } @@ -2370,6 +2405,7 @@ struct CreateVoiceConnectorInputBody: Swift.Equatable { let name: Swift.String? let awsRegion: ChimeSDKVoiceClientTypes.VoiceConnectorAwsRegion? let requireEncryption: Swift.Bool? + let tags: [ChimeSDKVoiceClientTypes.Tag]? } extension CreateVoiceConnectorInputBody: Swift.Decodable { @@ -2377,6 +2413,7 @@ extension CreateVoiceConnectorInputBody: Swift.Decodable { case awsRegion = "AwsRegion" case name = "Name" case requireEncryption = "RequireEncryption" + case tags = "Tags" } public init (from decoder: Swift.Decoder) throws { @@ -2387,6 +2424,17 @@ extension CreateVoiceConnectorInputBody: Swift.Decodable { awsRegion = awsRegionDecoded let requireEncryptionDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .requireEncryption) requireEncryption = requireEncryptionDecoded + let tagsContainer = try containerValues.decodeIfPresent([ChimeSDKVoiceClientTypes.Tag?].self, forKey: .tags) + var tagsDecoded0:[ChimeSDKVoiceClientTypes.Tag]? = nil + if let tagsContainer = tagsContainer { + tagsDecoded0 = [ChimeSDKVoiceClientTypes.Tag]() + for structure0 in tagsContainer { + if let structure0 = structure0 { + tagsDecoded0?.append(structure0) + } + } + } + tags = tagsDecoded0 } } @@ -8920,7 +8968,7 @@ extension ChimeSDKVoiceClientTypes { public struct LoggingConfiguration: Swift.Equatable { /// Enables or disables media metrics logging. public var enableMediaMetricLogs: Swift.Bool? - /// Boolean that enables sending SIP message logs to Amazon CloudWatch logs. + /// Boolean that enables sending SIP message logs to Amazon CloudWatch. public var enableSIPLogs: Swift.Bool? public init ( @@ -12272,6 +12320,7 @@ extension ChimeSDKVoiceClientTypes.SipMediaApplication: Swift.Codable { case createdTimestamp = "CreatedTimestamp" case endpoints = "Endpoints" case name = "Name" + case sipMediaApplicationArn = "SipMediaApplicationArn" case sipMediaApplicationId = "SipMediaApplicationId" case updatedTimestamp = "UpdatedTimestamp" } @@ -12293,6 +12342,9 @@ extension ChimeSDKVoiceClientTypes.SipMediaApplication: Swift.Codable { if let name = self.name { try encodeContainer.encode(name, forKey: .name) } + if let sipMediaApplicationArn = self.sipMediaApplicationArn { + try encodeContainer.encode(sipMediaApplicationArn, forKey: .sipMediaApplicationArn) + } if let sipMediaApplicationId = self.sipMediaApplicationId { try encodeContainer.encode(sipMediaApplicationId, forKey: .sipMediaApplicationId) } @@ -12324,6 +12376,8 @@ extension ChimeSDKVoiceClientTypes.SipMediaApplication: Swift.Codable { createdTimestamp = createdTimestampDecoded let updatedTimestampDecoded = try containerValues.decodeTimestampIfPresent(.dateTime, forKey: .updatedTimestamp) updatedTimestamp = updatedTimestampDecoded + let sipMediaApplicationArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sipMediaApplicationArn) + sipMediaApplicationArn = sipMediaApplicationArnDecoded } } @@ -12334,10 +12388,12 @@ extension ChimeSDKVoiceClientTypes { public var awsRegion: Swift.String? /// The SIP media application creation timestamp, in ISO 8601 format. public var createdTimestamp: ClientRuntime.Date? - /// List of endpoints for SIP media application. Currently, only one endpoint per SIP media application is permitted. + /// List of endpoints for a SIP media application. Currently, only one endpoint per SIP media application is permitted. public var endpoints: [ChimeSDKVoiceClientTypes.SipMediaApplicationEndpoint]? /// The SIP media application's name. public var name: Swift.String? + /// The ARN of the SIP media application. + public var sipMediaApplicationArn: Swift.String? /// A SIP media application's ID. public var sipMediaApplicationId: Swift.String? /// The time at which the SIP media application was updated. @@ -12348,6 +12404,7 @@ extension ChimeSDKVoiceClientTypes { createdTimestamp: ClientRuntime.Date? = nil, endpoints: [ChimeSDKVoiceClientTypes.SipMediaApplicationEndpoint]? = nil, name: Swift.String? = nil, + sipMediaApplicationArn: Swift.String? = nil, sipMediaApplicationId: Swift.String? = nil, updatedTimestamp: ClientRuntime.Date? = nil ) @@ -12356,6 +12413,7 @@ extension ChimeSDKVoiceClientTypes { self.createdTimestamp = createdTimestamp self.endpoints = endpoints self.name = name + self.sipMediaApplicationArn = sipMediaApplicationArn self.sipMediaApplicationId = sipMediaApplicationId self.updatedTimestamp = updatedTimestamp } diff --git a/Sources/Services/AWSCloudFront/EndpointResolver.swift b/Sources/Services/AWSCloudFront/EndpointResolver.swift index e57f0e3c383..dc0bb5d3440 100644 --- a/Sources/Services/AWSCloudFront/EndpointResolver.swift +++ b/Sources/Services/AWSCloudFront/EndpointResolver.swift @@ -35,7 +35,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://cloudfront.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"cloudfront\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://cloudfront-fips.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"cloudfront\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-cn\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://cloudfront.cn-northwest-1.amazonaws.com.cn\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"cn-northwest-1\",\"signingName\":\"cloudfront\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://cloudfront-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://cloudfront-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://cloudfront.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://cloudfront.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" + private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://cloudfront.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"cloudfront\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://cloudfront-fips.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"cloudfront\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-cn\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://cloudfront.cn-northwest-1.amazonaws.com.cn\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"cloudfront\",\"signingRegion\":\"cn-northwest-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://cloudfront-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://cloudfront-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://cloudfront.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://cloudfront.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSCostExplorer/EndpointResolver.swift b/Sources/Services/AWSCostExplorer/EndpointResolver.swift index b6f317564ce..21400e9be0e 100644 --- a/Sources/Services/AWSCostExplorer/EndpointResolver.swift +++ b/Sources/Services/AWSCostExplorer/EndpointResolver.swift @@ -35,7 +35,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://ce.us-east-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"ce\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-cn\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://ce.cn-northwest-1.amazonaws.com.cn\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"cn-northwest-1\",\"signingName\":\"ce\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://ce-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://ce-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://ce.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://ce.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" + private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://ce.us-east-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"ce\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-cn\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://ce.cn-northwest-1.amazonaws.com.cn\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"ce\",\"signingRegion\":\"cn-northwest-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://ce-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://ce-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://ce.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://ce.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSDrs/DrsClient.swift b/Sources/Services/AWSDrs/DrsClient.swift index c096e25d641..72dc3a0c9a2 100644 --- a/Sources/Services/AWSDrs/DrsClient.swift +++ b/Sources/Services/AWSDrs/DrsClient.swift @@ -165,6 +165,41 @@ extension DrsClient: DrsClientProtocol { return result } + /// Creates a new Launch Configuration Template. + public func createLaunchConfigurationTemplate(input: CreateLaunchConfigurationTemplateInput) async throws -> CreateLaunchConfigurationTemplateOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "createLaunchConfigurationTemplate") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "drs") + .withSigningRegion(value: config.signingRegion) + var operation = ClientRuntime.OperationStack(id: "createLaunchConfigurationTemplate") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + 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: EndpointResolverMiddleware(endpointResolver: config.endpointResolver, endpointParams: endpointParams)) + let apiMetadata = AWSClientRuntime.APIMetadata(serviceId: serviceName, version: "1.0") + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromEnv(apiMetadata: apiMetadata, frameworkMetadata: config.frameworkMetadata))) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "CreateLaunchConfigurationTemplateRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryerMiddleware(retryer: config.retryer)) + let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false, signingAlgorithm: .sigv4) + operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config)) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context.build(), input: input, next: client.getHandler()) + return result + } + /// Creates a new ReplicationConfigurationTemplate. public func createReplicationConfigurationTemplate(input: CreateReplicationConfigurationTemplateInput) async throws -> CreateReplicationConfigurationTemplateOutputResponse { @@ -235,6 +270,41 @@ extension DrsClient: DrsClientProtocol { return result } + /// Deletes a single Launch Configuration Template by ID. + public func deleteLaunchConfigurationTemplate(input: DeleteLaunchConfigurationTemplateInput) async throws -> DeleteLaunchConfigurationTemplateOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "deleteLaunchConfigurationTemplate") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "drs") + .withSigningRegion(value: config.signingRegion) + var operation = ClientRuntime.OperationStack(id: "deleteLaunchConfigurationTemplate") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + 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: EndpointResolverMiddleware(endpointResolver: config.endpointResolver, endpointParams: endpointParams)) + let apiMetadata = AWSClientRuntime.APIMetadata(serviceId: serviceName, version: "1.0") + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromEnv(apiMetadata: apiMetadata, frameworkMetadata: config.frameworkMetadata))) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "DeleteLaunchConfigurationTemplateRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryerMiddleware(retryer: config.retryer)) + let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false, signingAlgorithm: .sigv4) + operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config)) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context.build(), input: input, next: client.getHandler()) + return result + } + /// Deletes a single Recovery Instance by ID. This deletes the Recovery Instance resource from Elastic Disaster Recovery. The Recovery Instance must be disconnected first in order to delete it. public func deleteRecoveryInstance(input: DeleteRecoveryInstanceInput) async throws -> DeleteRecoveryInstanceOutputResponse { @@ -410,6 +480,41 @@ extension DrsClient: DrsClientProtocol { return result } + /// Lists all Launch Configuration Templates, filtered by Launch Configuration Template IDs + public func describeLaunchConfigurationTemplates(input: DescribeLaunchConfigurationTemplatesInput) async throws -> DescribeLaunchConfigurationTemplatesOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "describeLaunchConfigurationTemplates") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "drs") + .withSigningRegion(value: config.signingRegion) + var operation = ClientRuntime.OperationStack(id: "describeLaunchConfigurationTemplates") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + 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: EndpointResolverMiddleware(endpointResolver: config.endpointResolver, endpointParams: endpointParams)) + let apiMetadata = AWSClientRuntime.APIMetadata(serviceId: serviceName, version: "1.0") + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromEnv(apiMetadata: apiMetadata, frameworkMetadata: config.frameworkMetadata))) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "DescribeLaunchConfigurationTemplatesRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryerMiddleware(retryer: config.retryer)) + let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false, signingAlgorithm: .sigv4) + operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config)) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context.build(), input: input, next: client.getHandler()) + return result + } + /// Lists all Recovery Instances or multiple Recovery Instances by ID. public func describeRecoveryInstances(input: DescribeRecoveryInstancesInput) async throws -> DescribeRecoveryInstancesOutputResponse { @@ -1276,6 +1381,41 @@ extension DrsClient: DrsClientProtocol { return result } + /// Updates an existing Launch Configuration Template by ID. + public func updateLaunchConfigurationTemplate(input: UpdateLaunchConfigurationTemplateInput) async throws -> UpdateLaunchConfigurationTemplateOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "updateLaunchConfigurationTemplate") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "drs") + .withSigningRegion(value: config.signingRegion) + var operation = ClientRuntime.OperationStack(id: "updateLaunchConfigurationTemplate") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + 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: EndpointResolverMiddleware(endpointResolver: config.endpointResolver, endpointParams: endpointParams)) + let apiMetadata = AWSClientRuntime.APIMetadata(serviceId: serviceName, version: "1.0") + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromEnv(apiMetadata: apiMetadata, frameworkMetadata: config.frameworkMetadata))) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "UpdateLaunchConfigurationTemplateRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryerMiddleware(retryer: config.retryer)) + let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false, signingAlgorithm: .sigv4) + operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config)) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context.build(), input: input, next: client.getHandler()) + return result + } + /// Allows you to update a ReplicationConfiguration by Source Server ID. public func updateReplicationConfiguration(input: UpdateReplicationConfigurationInput) async throws -> UpdateReplicationConfigurationOutputResponse { diff --git a/Sources/Services/AWSDrs/DrsClientProtocol.swift b/Sources/Services/AWSDrs/DrsClientProtocol.swift index e43730647dc..950964fc7a6 100644 --- a/Sources/Services/AWSDrs/DrsClientProtocol.swift +++ b/Sources/Services/AWSDrs/DrsClientProtocol.swift @@ -7,10 +7,14 @@ import ClientRuntime public protocol DrsClientProtocol { /// Create an extended source server in the target Account based on the source server in staging account. func createExtendedSourceServer(input: CreateExtendedSourceServerInput) async throws -> CreateExtendedSourceServerOutputResponse + /// Creates a new Launch Configuration Template. + func createLaunchConfigurationTemplate(input: CreateLaunchConfigurationTemplateInput) async throws -> CreateLaunchConfigurationTemplateOutputResponse /// Creates a new ReplicationConfigurationTemplate. func createReplicationConfigurationTemplate(input: CreateReplicationConfigurationTemplateInput) async throws -> CreateReplicationConfigurationTemplateOutputResponse /// Deletes a single Job by ID. func deleteJob(input: DeleteJobInput) async throws -> DeleteJobOutputResponse + /// Deletes a single Launch Configuration Template by ID. + func deleteLaunchConfigurationTemplate(input: DeleteLaunchConfigurationTemplateInput) async throws -> DeleteLaunchConfigurationTemplateOutputResponse /// Deletes a single Recovery Instance by ID. This deletes the Recovery Instance resource from Elastic Disaster Recovery. The Recovery Instance must be disconnected first in order to delete it. func deleteRecoveryInstance(input: DeleteRecoveryInstanceInput) async throws -> DeleteRecoveryInstanceOutputResponse /// Deletes a single Replication Configuration Template by ID @@ -21,6 +25,8 @@ public protocol DrsClientProtocol { func describeJobLogItems(input: DescribeJobLogItemsInput) async throws -> DescribeJobLogItemsOutputResponse /// Returns a list of Jobs. Use the JobsID and fromDate and toDate filters to limit which jobs are returned. The response is sorted by creationDataTime - latest date first. Jobs are created by the StartRecovery, TerminateRecoveryInstances and StartFailbackLaunch APIs. Jobs are also created by DiagnosticLaunch and TerminateDiagnosticInstances, which are APIs available only to *Support* and only used in response to relevant support tickets. func describeJobs(input: DescribeJobsInput) async throws -> DescribeJobsOutputResponse + /// Lists all Launch Configuration Templates, filtered by Launch Configuration Template IDs + func describeLaunchConfigurationTemplates(input: DescribeLaunchConfigurationTemplatesInput) async throws -> DescribeLaunchConfigurationTemplatesOutputResponse /// Lists all Recovery Instances or multiple Recovery Instances by ID. func describeRecoveryInstances(input: DescribeRecoveryInstancesInput) async throws -> DescribeRecoveryInstancesOutputResponse /// Lists all Recovery Snapshots for a single Source Server. @@ -72,6 +78,8 @@ public protocol DrsClientProtocol { func updateFailbackReplicationConfiguration(input: UpdateFailbackReplicationConfigurationInput) async throws -> UpdateFailbackReplicationConfigurationOutputResponse /// Updates a LaunchConfiguration by Source Server ID. func updateLaunchConfiguration(input: UpdateLaunchConfigurationInput) async throws -> UpdateLaunchConfigurationOutputResponse + /// Updates an existing Launch Configuration Template by ID. + func updateLaunchConfigurationTemplate(input: UpdateLaunchConfigurationTemplateInput) async throws -> UpdateLaunchConfigurationTemplateOutputResponse /// Allows you to update a ReplicationConfiguration by Source Server ID. func updateReplicationConfiguration(input: UpdateReplicationConfigurationInput) async throws -> UpdateReplicationConfigurationOutputResponse /// Updates a ReplicationConfigurationTemplate by ID. diff --git a/Sources/Services/AWSDrs/models/Models.swift b/Sources/Services/AWSDrs/models/Models.swift index ceda647cfc6..799694e0f8f 100644 --- a/Sources/Services/AWSDrs/models/Models.swift +++ b/Sources/Services/AWSDrs/models/Models.swift @@ -485,6 +485,203 @@ extension CreateExtendedSourceServerOutputResponseBody: Swift.Decodable { } } +extension CreateLaunchConfigurationTemplateInput: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "CreateLaunchConfigurationTemplateInput(copyPrivateIp: \(Swift.String(describing: copyPrivateIp)), copyTags: \(Swift.String(describing: copyTags)), launchDisposition: \(Swift.String(describing: launchDisposition)), licensing: \(Swift.String(describing: licensing)), targetInstanceTypeRightSizingMethod: \(Swift.String(describing: targetInstanceTypeRightSizingMethod)), tags: \"CONTENT_REDACTED\")"} +} + +extension CreateLaunchConfigurationTemplateInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case copyPrivateIp + case copyTags + case launchDisposition + case licensing + case tags + case targetInstanceTypeRightSizingMethod + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let copyPrivateIp = self.copyPrivateIp { + try encodeContainer.encode(copyPrivateIp, forKey: .copyPrivateIp) + } + if let copyTags = self.copyTags { + try encodeContainer.encode(copyTags, forKey: .copyTags) + } + if let launchDisposition = self.launchDisposition { + try encodeContainer.encode(launchDisposition.rawValue, forKey: .launchDisposition) + } + if let licensing = self.licensing { + try encodeContainer.encode(licensing, forKey: .licensing) + } + if let tags = tags { + var tagsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .tags) + for (dictKey0, tagsMap0) in tags { + try tagsContainer.encode(tagsMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + } + } + if let targetInstanceTypeRightSizingMethod = self.targetInstanceTypeRightSizingMethod { + try encodeContainer.encode(targetInstanceTypeRightSizingMethod.rawValue, forKey: .targetInstanceTypeRightSizingMethod) + } + } +} + +extension CreateLaunchConfigurationTemplateInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/CreateLaunchConfigurationTemplate" + } +} + +public struct CreateLaunchConfigurationTemplateInput: Swift.Equatable { + /// Copy private IP. + public var copyPrivateIp: Swift.Bool? + /// Copy tags. + public var copyTags: Swift.Bool? + /// Launch disposition. + public var launchDisposition: DrsClientTypes.LaunchDisposition? + /// Licensing. + public var licensing: DrsClientTypes.Licensing? + /// Request to associate tags during creation of a Launch Configuration Template. + public var tags: [Swift.String:Swift.String]? + /// Target instance type right-sizing method. + public var targetInstanceTypeRightSizingMethod: DrsClientTypes.TargetInstanceTypeRightSizingMethod? + + public init ( + copyPrivateIp: Swift.Bool? = nil, + copyTags: Swift.Bool? = nil, + launchDisposition: DrsClientTypes.LaunchDisposition? = nil, + licensing: DrsClientTypes.Licensing? = nil, + tags: [Swift.String:Swift.String]? = nil, + targetInstanceTypeRightSizingMethod: DrsClientTypes.TargetInstanceTypeRightSizingMethod? = nil + ) + { + self.copyPrivateIp = copyPrivateIp + self.copyTags = copyTags + self.launchDisposition = launchDisposition + self.licensing = licensing + self.tags = tags + self.targetInstanceTypeRightSizingMethod = targetInstanceTypeRightSizingMethod + } +} + +struct CreateLaunchConfigurationTemplateInputBody: Swift.Equatable { + let tags: [Swift.String:Swift.String]? + let launchDisposition: DrsClientTypes.LaunchDisposition? + let targetInstanceTypeRightSizingMethod: DrsClientTypes.TargetInstanceTypeRightSizingMethod? + let copyPrivateIp: Swift.Bool? + let copyTags: Swift.Bool? + let licensing: DrsClientTypes.Licensing? +} + +extension CreateLaunchConfigurationTemplateInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case copyPrivateIp + case copyTags + case launchDisposition + case licensing + case tags + case targetInstanceTypeRightSizingMethod + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let tagsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .tags) + var tagsDecoded0: [Swift.String:Swift.String]? = nil + if let tagsContainer = tagsContainer { + tagsDecoded0 = [Swift.String:Swift.String]() + for (key0, tagvalue0) in tagsContainer { + if let tagvalue0 = tagvalue0 { + tagsDecoded0?[key0] = tagvalue0 + } + } + } + tags = tagsDecoded0 + let launchDispositionDecoded = try containerValues.decodeIfPresent(DrsClientTypes.LaunchDisposition.self, forKey: .launchDisposition) + launchDisposition = launchDispositionDecoded + let targetInstanceTypeRightSizingMethodDecoded = try containerValues.decodeIfPresent(DrsClientTypes.TargetInstanceTypeRightSizingMethod.self, forKey: .targetInstanceTypeRightSizingMethod) + targetInstanceTypeRightSizingMethod = targetInstanceTypeRightSizingMethodDecoded + let copyPrivateIpDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .copyPrivateIp) + copyPrivateIp = copyPrivateIpDecoded + let copyTagsDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .copyTags) + copyTags = copyTagsDecoded + let licensingDecoded = try containerValues.decodeIfPresent(DrsClientTypes.Licensing.self, forKey: .licensing) + licensing = licensingDecoded + } +} + +extension CreateLaunchConfigurationTemplateOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} + +extension CreateLaunchConfigurationTemplateOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "AccessDeniedException" : self = .accessDeniedException(try AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerException" : self = .internalServerException(try InternalServerException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceQuotaExceededException" : self = .serviceQuotaExceededException(try ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ThrottlingException" : self = .throttlingException(try ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "UninitializedAccountException" : self = .uninitializedAccountException(try UninitializedAccountException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ValidationException" : self = .validationException(try ValidationException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + } + } +} + +public enum CreateLaunchConfigurationTemplateOutputError: Swift.Error, Swift.Equatable { + case accessDeniedException(AccessDeniedException) + case internalServerException(InternalServerException) + case serviceQuotaExceededException(ServiceQuotaExceededException) + case throttlingException(ThrottlingException) + case uninitializedAccountException(UninitializedAccountException) + case validationException(ValidationException) + case unknown(UnknownAWSHttpServiceError) +} + +extension CreateLaunchConfigurationTemplateOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: CreateLaunchConfigurationTemplateOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.launchConfigurationTemplate = output.launchConfigurationTemplate + } else { + self.launchConfigurationTemplate = nil + } + } +} + +public struct CreateLaunchConfigurationTemplateOutputResponse: Swift.Equatable { + /// Created Launch Configuration Template. + public var launchConfigurationTemplate: DrsClientTypes.LaunchConfigurationTemplate? + + public init ( + launchConfigurationTemplate: DrsClientTypes.LaunchConfigurationTemplate? = nil + ) + { + self.launchConfigurationTemplate = launchConfigurationTemplate + } +} + +struct CreateLaunchConfigurationTemplateOutputResponseBody: Swift.Equatable { + let launchConfigurationTemplate: DrsClientTypes.LaunchConfigurationTemplate? +} + +extension CreateLaunchConfigurationTemplateOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case launchConfigurationTemplate + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let launchConfigurationTemplateDecoded = try containerValues.decodeIfPresent(DrsClientTypes.LaunchConfigurationTemplate.self, forKey: .launchConfigurationTemplate) + launchConfigurationTemplate = launchConfigurationTemplateDecoded + } +} + extension CreateReplicationConfigurationTemplateInput: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { "CreateReplicationConfigurationTemplateInput(associateDefaultSecurityGroup: \(Swift.String(describing: associateDefaultSecurityGroup)), autoReplicateNewDisks: \(Swift.String(describing: autoReplicateNewDisks)), bandwidthThrottling: \(Swift.String(describing: bandwidthThrottling)), createPublicIP: \(Swift.String(describing: createPublicIP)), dataPlaneRouting: \(Swift.String(describing: dataPlaneRouting)), defaultLargeStagingDiskType: \(Swift.String(describing: defaultLargeStagingDiskType)), ebsEncryption: \(Swift.String(describing: ebsEncryption)), ebsEncryptionKeyArn: \(Swift.String(describing: ebsEncryptionKeyArn)), pitPolicy: \(Swift.String(describing: pitPolicy)), replicationServerInstanceType: \(Swift.String(describing: replicationServerInstanceType)), replicationServersSecurityGroupsIDs: \(Swift.String(describing: replicationServersSecurityGroupsIDs)), stagingAreaSubnetId: \(Swift.String(describing: stagingAreaSubnetId)), useDedicatedReplicationServer: \(Swift.String(describing: useDedicatedReplicationServer)), stagingAreaTags: \"CONTENT_REDACTED\", tags: \"CONTENT_REDACTED\")"} @@ -1691,6 +1888,94 @@ public struct DeleteJobOutputResponse: Swift.Equatable { public init () { } } +extension DeleteLaunchConfigurationTemplateInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case launchConfigurationTemplateID + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let launchConfigurationTemplateID = self.launchConfigurationTemplateID { + try encodeContainer.encode(launchConfigurationTemplateID, forKey: .launchConfigurationTemplateID) + } + } +} + +extension DeleteLaunchConfigurationTemplateInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/DeleteLaunchConfigurationTemplate" + } +} + +public struct DeleteLaunchConfigurationTemplateInput: Swift.Equatable { + /// The ID of the Launch Configuration Template to be deleted. + /// This member is required. + public var launchConfigurationTemplateID: Swift.String? + + public init ( + launchConfigurationTemplateID: Swift.String? = nil + ) + { + self.launchConfigurationTemplateID = launchConfigurationTemplateID + } +} + +struct DeleteLaunchConfigurationTemplateInputBody: Swift.Equatable { + let launchConfigurationTemplateID: Swift.String? +} + +extension DeleteLaunchConfigurationTemplateInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case launchConfigurationTemplateID + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let launchConfigurationTemplateIDDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .launchConfigurationTemplateID) + launchConfigurationTemplateID = launchConfigurationTemplateIDDecoded + } +} + +extension DeleteLaunchConfigurationTemplateOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} + +extension DeleteLaunchConfigurationTemplateOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "ConflictException" : self = .conflictException(try ConflictException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerException" : self = .internalServerException(try InternalServerException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ResourceNotFoundException" : self = .resourceNotFoundException(try ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ThrottlingException" : self = .throttlingException(try ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "UninitializedAccountException" : self = .uninitializedAccountException(try UninitializedAccountException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + } + } +} + +public enum DeleteLaunchConfigurationTemplateOutputError: Swift.Error, Swift.Equatable { + case conflictException(ConflictException) + case internalServerException(InternalServerException) + case resourceNotFoundException(ResourceNotFoundException) + case throttlingException(ThrottlingException) + case uninitializedAccountException(UninitializedAccountException) + case unknown(UnknownAWSHttpServiceError) +} + +extension DeleteLaunchConfigurationTemplateOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + } +} + +public struct DeleteLaunchConfigurationTemplateOutputResponse: Swift.Equatable { + + public init () { } +} + extension DeleteRecoveryInstanceInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case recoveryInstanceID @@ -2327,18 +2612,191 @@ extension DrsClientTypes { /// The end date in a date range query. public var toDate: Swift.String? - public init ( - fromDate: Swift.String? = nil, - jobIDs: [Swift.String]? = nil, - toDate: Swift.String? = nil - ) - { - self.fromDate = fromDate - self.jobIDs = jobIDs - self.toDate = toDate - } + public init ( + fromDate: Swift.String? = nil, + jobIDs: [Swift.String]? = nil, + toDate: Swift.String? = nil + ) + { + self.fromDate = fromDate + self.jobIDs = jobIDs + self.toDate = toDate + } + } + +} + +extension DescribeLaunchConfigurationTemplatesInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case launchConfigurationTemplateIDs + case maxResults + case nextToken + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let launchConfigurationTemplateIDs = launchConfigurationTemplateIDs { + var launchConfigurationTemplateIDsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .launchConfigurationTemplateIDs) + for launchconfigurationtemplateid0 in launchConfigurationTemplateIDs { + try launchConfigurationTemplateIDsContainer.encode(launchconfigurationtemplateid0) + } + } + if maxResults != 0 { + try encodeContainer.encode(maxResults, forKey: .maxResults) + } + if let nextToken = self.nextToken { + try encodeContainer.encode(nextToken, forKey: .nextToken) + } + } +} + +extension DescribeLaunchConfigurationTemplatesInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/DescribeLaunchConfigurationTemplates" + } +} + +public struct DescribeLaunchConfigurationTemplatesInput: Swift.Equatable { + /// Request to filter Launch Configuration Templates list by Launch Configuration Template ID. + public var launchConfigurationTemplateIDs: [Swift.String]? + /// Maximum results to be returned in DescribeLaunchConfigurationTemplates. + public var maxResults: Swift.Int + /// The token of the next Launch Configuration Template to retrieve. + public var nextToken: Swift.String? + + public init ( + launchConfigurationTemplateIDs: [Swift.String]? = nil, + maxResults: Swift.Int = 0, + nextToken: Swift.String? = nil + ) + { + self.launchConfigurationTemplateIDs = launchConfigurationTemplateIDs + self.maxResults = maxResults + self.nextToken = nextToken + } +} + +struct DescribeLaunchConfigurationTemplatesInputBody: Swift.Equatable { + let launchConfigurationTemplateIDs: [Swift.String]? + let maxResults: Swift.Int + let nextToken: Swift.String? +} + +extension DescribeLaunchConfigurationTemplatesInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case launchConfigurationTemplateIDs + case maxResults + case nextToken + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let launchConfigurationTemplateIDsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .launchConfigurationTemplateIDs) + var launchConfigurationTemplateIDsDecoded0:[Swift.String]? = nil + if let launchConfigurationTemplateIDsContainer = launchConfigurationTemplateIDsContainer { + launchConfigurationTemplateIDsDecoded0 = [Swift.String]() + for string0 in launchConfigurationTemplateIDsContainer { + if let string0 = string0 { + launchConfigurationTemplateIDsDecoded0?.append(string0) + } + } + } + launchConfigurationTemplateIDs = launchConfigurationTemplateIDsDecoded0 + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) ?? 0 + maxResults = maxResultsDecoded + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + +extension DescribeLaunchConfigurationTemplatesOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} + +extension DescribeLaunchConfigurationTemplatesOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "InternalServerException" : self = .internalServerException(try InternalServerException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ResourceNotFoundException" : self = .resourceNotFoundException(try ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ThrottlingException" : self = .throttlingException(try ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "UninitializedAccountException" : self = .uninitializedAccountException(try UninitializedAccountException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ValidationException" : self = .validationException(try ValidationException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + } + } +} + +public enum DescribeLaunchConfigurationTemplatesOutputError: Swift.Error, Swift.Equatable { + case internalServerException(InternalServerException) + case resourceNotFoundException(ResourceNotFoundException) + case throttlingException(ThrottlingException) + case uninitializedAccountException(UninitializedAccountException) + case validationException(ValidationException) + case unknown(UnknownAWSHttpServiceError) +} + +extension DescribeLaunchConfigurationTemplatesOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: DescribeLaunchConfigurationTemplatesOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.items = output.items + self.nextToken = output.nextToken + } else { + self.items = nil + self.nextToken = nil + } + } +} + +public struct DescribeLaunchConfigurationTemplatesOutputResponse: Swift.Equatable { + /// List of items returned by DescribeLaunchConfigurationTemplates. + public var items: [DrsClientTypes.LaunchConfigurationTemplate]? + /// The token of the next Launch Configuration Template to retrieve. + public var nextToken: Swift.String? + + public init ( + items: [DrsClientTypes.LaunchConfigurationTemplate]? = nil, + nextToken: Swift.String? = nil + ) + { + self.items = items + self.nextToken = nextToken + } +} + +struct DescribeLaunchConfigurationTemplatesOutputResponseBody: Swift.Equatable { + let items: [DrsClientTypes.LaunchConfigurationTemplate]? + let nextToken: Swift.String? +} + +extension DescribeLaunchConfigurationTemplatesOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case items + case nextToken } + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let itemsContainer = try containerValues.decodeIfPresent([DrsClientTypes.LaunchConfigurationTemplate?].self, forKey: .items) + var itemsDecoded0:[DrsClientTypes.LaunchConfigurationTemplate]? = nil + if let itemsContainer = itemsContainer { + itemsDecoded0 = [DrsClientTypes.LaunchConfigurationTemplate]() + for structure0 in itemsContainer { + if let structure0 = structure0 { + itemsDecoded0?.append(structure0) + } + } + } + items = itemsDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } } extension DescribeRecoveryInstancesInput: Swift.Encodable { @@ -5215,6 +5673,128 @@ extension DrsClientTypes { } } +extension DrsClientTypes.LaunchConfigurationTemplate: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case arn + case copyPrivateIp + case copyTags + case launchConfigurationTemplateID + case launchDisposition + case licensing + case tags + case targetInstanceTypeRightSizingMethod + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let arn = self.arn { + try encodeContainer.encode(arn, forKey: .arn) + } + if let copyPrivateIp = self.copyPrivateIp { + try encodeContainer.encode(copyPrivateIp, forKey: .copyPrivateIp) + } + if let copyTags = self.copyTags { + try encodeContainer.encode(copyTags, forKey: .copyTags) + } + if let launchConfigurationTemplateID = self.launchConfigurationTemplateID { + try encodeContainer.encode(launchConfigurationTemplateID, forKey: .launchConfigurationTemplateID) + } + if let launchDisposition = self.launchDisposition { + try encodeContainer.encode(launchDisposition.rawValue, forKey: .launchDisposition) + } + if let licensing = self.licensing { + try encodeContainer.encode(licensing, forKey: .licensing) + } + if let tags = tags { + var tagsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .tags) + for (dictKey0, tagsMap0) in tags { + try tagsContainer.encode(tagsMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + } + } + if let targetInstanceTypeRightSizingMethod = self.targetInstanceTypeRightSizingMethod { + try encodeContainer.encode(targetInstanceTypeRightSizingMethod.rawValue, forKey: .targetInstanceTypeRightSizingMethod) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let launchConfigurationTemplateIDDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .launchConfigurationTemplateID) + launchConfigurationTemplateID = launchConfigurationTemplateIDDecoded + let arnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .arn) + arn = arnDecoded + let tagsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .tags) + var tagsDecoded0: [Swift.String:Swift.String]? = nil + if let tagsContainer = tagsContainer { + tagsDecoded0 = [Swift.String:Swift.String]() + for (key0, tagvalue0) in tagsContainer { + if let tagvalue0 = tagvalue0 { + tagsDecoded0?[key0] = tagvalue0 + } + } + } + tags = tagsDecoded0 + let launchDispositionDecoded = try containerValues.decodeIfPresent(DrsClientTypes.LaunchDisposition.self, forKey: .launchDisposition) + launchDisposition = launchDispositionDecoded + let targetInstanceTypeRightSizingMethodDecoded = try containerValues.decodeIfPresent(DrsClientTypes.TargetInstanceTypeRightSizingMethod.self, forKey: .targetInstanceTypeRightSizingMethod) + targetInstanceTypeRightSizingMethod = targetInstanceTypeRightSizingMethodDecoded + let copyPrivateIpDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .copyPrivateIp) + copyPrivateIp = copyPrivateIpDecoded + let copyTagsDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .copyTags) + copyTags = copyTagsDecoded + let licensingDecoded = try containerValues.decodeIfPresent(DrsClientTypes.Licensing.self, forKey: .licensing) + licensing = licensingDecoded + } +} + +extension DrsClientTypes.LaunchConfigurationTemplate: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "LaunchConfigurationTemplate(arn: \(Swift.String(describing: arn)), copyPrivateIp: \(Swift.String(describing: copyPrivateIp)), copyTags: \(Swift.String(describing: copyTags)), launchConfigurationTemplateID: \(Swift.String(describing: launchConfigurationTemplateID)), launchDisposition: \(Swift.String(describing: launchDisposition)), licensing: \(Swift.String(describing: licensing)), targetInstanceTypeRightSizingMethod: \(Swift.String(describing: targetInstanceTypeRightSizingMethod)), tags: \"CONTENT_REDACTED\")"} +} + +extension DrsClientTypes { + /// Account level Launch Configuration Template. + public struct LaunchConfigurationTemplate: Swift.Equatable { + /// ARN of the Launch Configuration Template. + public var arn: Swift.String? + /// Copy private IP. + public var copyPrivateIp: Swift.Bool? + /// Copy tags. + public var copyTags: Swift.Bool? + /// ID of the Launch Configuration Template. + public var launchConfigurationTemplateID: Swift.String? + /// Launch disposition. + public var launchDisposition: DrsClientTypes.LaunchDisposition? + /// Licensing. + public var licensing: DrsClientTypes.Licensing? + /// Tags of the Launch Configuration Template. + public var tags: [Swift.String:Swift.String]? + /// Target instance type right-sizing method. + public var targetInstanceTypeRightSizingMethod: DrsClientTypes.TargetInstanceTypeRightSizingMethod? + + public init ( + arn: Swift.String? = nil, + copyPrivateIp: Swift.Bool? = nil, + copyTags: Swift.Bool? = nil, + launchConfigurationTemplateID: Swift.String? = nil, + launchDisposition: DrsClientTypes.LaunchDisposition? = nil, + licensing: DrsClientTypes.Licensing? = nil, + tags: [Swift.String:Swift.String]? = nil, + targetInstanceTypeRightSizingMethod: DrsClientTypes.TargetInstanceTypeRightSizingMethod? = nil + ) + { + self.arn = arn + self.copyPrivateIp = copyPrivateIp + self.copyTags = copyTags + self.launchConfigurationTemplateID = launchConfigurationTemplateID + self.launchDisposition = launchDisposition + self.licensing = licensing + self.tags = tags + self.targetInstanceTypeRightSizingMethod = targetInstanceTypeRightSizingMethod + } + } + +} + extension DrsClientTypes { public enum LaunchDisposition: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case started @@ -8472,6 +9052,7 @@ extension DrsClientTypes.SourceProperties: Swift.Codable { case os case ramBytes case recommendedInstanceType + case supportsNitroInstances } public func encode(to encoder: Swift.Encoder) throws { @@ -8509,6 +9090,9 @@ extension DrsClientTypes.SourceProperties: Swift.Codable { if let recommendedInstanceType = self.recommendedInstanceType { try encodeContainer.encode(recommendedInstanceType, forKey: .recommendedInstanceType) } + if let supportsNitroInstances = self.supportsNitroInstances { + try encodeContainer.encode(supportsNitroInstances, forKey: .supportsNitroInstances) + } } public init (from decoder: Swift.Decoder) throws { @@ -8556,6 +9140,8 @@ extension DrsClientTypes.SourceProperties: Swift.Codable { ramBytes = ramBytesDecoded let osDecoded = try containerValues.decodeIfPresent(DrsClientTypes.OS.self, forKey: .os) os = osDecoded + let supportsNitroInstancesDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .supportsNitroInstances) + supportsNitroInstances = supportsNitroInstancesDecoded } } @@ -8578,6 +9164,8 @@ extension DrsClientTypes { public var ramBytes: Swift.Int /// The recommended EC2 instance type that will be used when recovering the Source Server. public var recommendedInstanceType: Swift.String? + /// Are EC2 nitro instance types supported when recovering the Source Server. + public var supportsNitroInstances: Swift.Bool? public init ( cpus: [DrsClientTypes.CPU]? = nil, @@ -8587,7 +9175,8 @@ extension DrsClientTypes { networkInterfaces: [DrsClientTypes.NetworkInterface]? = nil, os: DrsClientTypes.OS? = nil, ramBytes: Swift.Int = 0, - recommendedInstanceType: Swift.String? = nil + recommendedInstanceType: Swift.String? = nil, + supportsNitroInstances: Swift.Bool? = nil ) { self.cpus = cpus @@ -8598,6 +9187,7 @@ extension DrsClientTypes { self.os = os self.ramBytes = ramBytes self.recommendedInstanceType = recommendedInstanceType + self.supportsNitroInstances = supportsNitroInstances } } @@ -10509,6 +11099,187 @@ extension UpdateLaunchConfigurationOutputResponseBody: Swift.Decodable { } } +extension UpdateLaunchConfigurationTemplateInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case copyPrivateIp + case copyTags + case launchConfigurationTemplateID + case launchDisposition + case licensing + case targetInstanceTypeRightSizingMethod + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let copyPrivateIp = self.copyPrivateIp { + try encodeContainer.encode(copyPrivateIp, forKey: .copyPrivateIp) + } + if let copyTags = self.copyTags { + try encodeContainer.encode(copyTags, forKey: .copyTags) + } + if let launchConfigurationTemplateID = self.launchConfigurationTemplateID { + try encodeContainer.encode(launchConfigurationTemplateID, forKey: .launchConfigurationTemplateID) + } + if let launchDisposition = self.launchDisposition { + try encodeContainer.encode(launchDisposition.rawValue, forKey: .launchDisposition) + } + if let licensing = self.licensing { + try encodeContainer.encode(licensing, forKey: .licensing) + } + if let targetInstanceTypeRightSizingMethod = self.targetInstanceTypeRightSizingMethod { + try encodeContainer.encode(targetInstanceTypeRightSizingMethod.rawValue, forKey: .targetInstanceTypeRightSizingMethod) + } + } +} + +extension UpdateLaunchConfigurationTemplateInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/UpdateLaunchConfigurationTemplate" + } +} + +public struct UpdateLaunchConfigurationTemplateInput: Swift.Equatable { + /// Copy private IP. + public var copyPrivateIp: Swift.Bool? + /// Copy tags. + public var copyTags: Swift.Bool? + /// Launch Configuration Template ID. + /// This member is required. + public var launchConfigurationTemplateID: Swift.String? + /// Launch disposition. + public var launchDisposition: DrsClientTypes.LaunchDisposition? + /// Licensing. + public var licensing: DrsClientTypes.Licensing? + /// Target instance type right-sizing method. + public var targetInstanceTypeRightSizingMethod: DrsClientTypes.TargetInstanceTypeRightSizingMethod? + + public init ( + copyPrivateIp: Swift.Bool? = nil, + copyTags: Swift.Bool? = nil, + launchConfigurationTemplateID: Swift.String? = nil, + launchDisposition: DrsClientTypes.LaunchDisposition? = nil, + licensing: DrsClientTypes.Licensing? = nil, + targetInstanceTypeRightSizingMethod: DrsClientTypes.TargetInstanceTypeRightSizingMethod? = nil + ) + { + self.copyPrivateIp = copyPrivateIp + self.copyTags = copyTags + self.launchConfigurationTemplateID = launchConfigurationTemplateID + self.launchDisposition = launchDisposition + self.licensing = licensing + self.targetInstanceTypeRightSizingMethod = targetInstanceTypeRightSizingMethod + } +} + +struct UpdateLaunchConfigurationTemplateInputBody: Swift.Equatable { + let launchConfigurationTemplateID: Swift.String? + let launchDisposition: DrsClientTypes.LaunchDisposition? + let targetInstanceTypeRightSizingMethod: DrsClientTypes.TargetInstanceTypeRightSizingMethod? + let copyPrivateIp: Swift.Bool? + let copyTags: Swift.Bool? + let licensing: DrsClientTypes.Licensing? +} + +extension UpdateLaunchConfigurationTemplateInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case copyPrivateIp + case copyTags + case launchConfigurationTemplateID + case launchDisposition + case licensing + case targetInstanceTypeRightSizingMethod + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let launchConfigurationTemplateIDDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .launchConfigurationTemplateID) + launchConfigurationTemplateID = launchConfigurationTemplateIDDecoded + let launchDispositionDecoded = try containerValues.decodeIfPresent(DrsClientTypes.LaunchDisposition.self, forKey: .launchDisposition) + launchDisposition = launchDispositionDecoded + let targetInstanceTypeRightSizingMethodDecoded = try containerValues.decodeIfPresent(DrsClientTypes.TargetInstanceTypeRightSizingMethod.self, forKey: .targetInstanceTypeRightSizingMethod) + targetInstanceTypeRightSizingMethod = targetInstanceTypeRightSizingMethodDecoded + let copyPrivateIpDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .copyPrivateIp) + copyPrivateIp = copyPrivateIpDecoded + let copyTagsDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .copyTags) + copyTags = copyTagsDecoded + let licensingDecoded = try containerValues.decodeIfPresent(DrsClientTypes.Licensing.self, forKey: .licensing) + licensing = licensingDecoded + } +} + +extension UpdateLaunchConfigurationTemplateOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} + +extension UpdateLaunchConfigurationTemplateOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "AccessDeniedException" : self = .accessDeniedException(try AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerException" : self = .internalServerException(try InternalServerException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ResourceNotFoundException" : self = .resourceNotFoundException(try ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ThrottlingException" : self = .throttlingException(try ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "UninitializedAccountException" : self = .uninitializedAccountException(try UninitializedAccountException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ValidationException" : self = .validationException(try ValidationException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + } + } +} + +public enum UpdateLaunchConfigurationTemplateOutputError: Swift.Error, Swift.Equatable { + case accessDeniedException(AccessDeniedException) + case internalServerException(InternalServerException) + case resourceNotFoundException(ResourceNotFoundException) + case throttlingException(ThrottlingException) + case uninitializedAccountException(UninitializedAccountException) + case validationException(ValidationException) + case unknown(UnknownAWSHttpServiceError) +} + +extension UpdateLaunchConfigurationTemplateOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: UpdateLaunchConfigurationTemplateOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.launchConfigurationTemplate = output.launchConfigurationTemplate + } else { + self.launchConfigurationTemplate = nil + } + } +} + +public struct UpdateLaunchConfigurationTemplateOutputResponse: Swift.Equatable { + /// Updated Launch Configuration Template. + public var launchConfigurationTemplate: DrsClientTypes.LaunchConfigurationTemplate? + + public init ( + launchConfigurationTemplate: DrsClientTypes.LaunchConfigurationTemplate? = nil + ) + { + self.launchConfigurationTemplate = launchConfigurationTemplate + } +} + +struct UpdateLaunchConfigurationTemplateOutputResponseBody: Swift.Equatable { + let launchConfigurationTemplate: DrsClientTypes.LaunchConfigurationTemplate? +} + +extension UpdateLaunchConfigurationTemplateOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case launchConfigurationTemplate + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let launchConfigurationTemplateDecoded = try containerValues.decodeIfPresent(DrsClientTypes.LaunchConfigurationTemplate.self, forKey: .launchConfigurationTemplate) + launchConfigurationTemplate = launchConfigurationTemplateDecoded + } +} + extension UpdateReplicationConfigurationInput: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { "UpdateReplicationConfigurationInput(associateDefaultSecurityGroup: \(Swift.String(describing: associateDefaultSecurityGroup)), autoReplicateNewDisks: \(Swift.String(describing: autoReplicateNewDisks)), bandwidthThrottling: \(Swift.String(describing: bandwidthThrottling)), createPublicIP: \(Swift.String(describing: createPublicIP)), dataPlaneRouting: \(Swift.String(describing: dataPlaneRouting)), defaultLargeStagingDiskType: \(Swift.String(describing: defaultLargeStagingDiskType)), ebsEncryption: \(Swift.String(describing: ebsEncryption)), ebsEncryptionKeyArn: \(Swift.String(describing: ebsEncryptionKeyArn)), name: \(Swift.String(describing: name)), pitPolicy: \(Swift.String(describing: pitPolicy)), replicatedDisks: \(Swift.String(describing: replicatedDisks)), replicationServerInstanceType: \(Swift.String(describing: replicationServerInstanceType)), replicationServersSecurityGroupsIDs: \(Swift.String(describing: replicationServersSecurityGroupsIDs)), sourceServerID: \(Swift.String(describing: sourceServerID)), stagingAreaSubnetId: \(Swift.String(describing: stagingAreaSubnetId)), useDedicatedReplicationServer: \(Swift.String(describing: useDedicatedReplicationServer)), stagingAreaTags: \"CONTENT_REDACTED\")"} diff --git a/Sources/Services/AWSDynamoDB/DynamoDBClient.swift b/Sources/Services/AWSDynamoDB/DynamoDBClient.swift index b9b236516f6..06f647a23ca 100644 --- a/Sources/Services/AWSDynamoDB/DynamoDBClient.swift +++ b/Sources/Services/AWSDynamoDB/DynamoDBClient.swift @@ -166,7 +166,7 @@ extension DynamoDBClient: DynamoDBClientProtocol { return result } - /// The BatchGetItem operation returns the attributes of one or more items from one or more tables. You identify requested items by primary key. A single operation can retrieve up to 16 MB of data, which can contain as many as 100 items. BatchGetItem returns a partial result if the response size limit is exceeded, the table's provisioned throughput is exceeded, or an internal processing failure occurs. If a partial result is returned, the operation returns a value for UnprocessedKeys. You can use this value to retry the operation starting with the next item to get. If you request more than 100 items, BatchGetItem returns a ValidationException with the message "Too many items requested for the BatchGetItem call." For example, if you ask to retrieve 100 items, but each individual item is 300 KB in size, the system returns 52 items (so as not to exceed the 16 MB limit). It also returns an appropriate UnprocessedKeys value so you can get the next page of results. If desired, your application can include its own logic to assemble the pages of results into one dataset. If none of the items can be processed due to insufficient provisioned throughput on all of the tables in the request, then BatchGetItem returns a ProvisionedThroughputExceededException. If at least one of the items is successfully processed, then BatchGetItem completes successfully, while returning the keys of the unread items in UnprocessedKeys. If DynamoDB returns any unprocessed items, you should retry the batch operation on those items. However, we strongly recommend that you use an exponential backoff algorithm. If you retry the batch operation immediately, the underlying read or write requests can still fail due to throttling on the individual tables. If you delay the batch operation using exponential backoff, the individual requests in the batch are much more likely to succeed. For more information, see [Batch Operations and Error Handling](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ErrorHandling.html#BatchOperations) in the Amazon DynamoDB Developer Guide. By default, BatchGetItem performs eventually consistent reads on every table in the request. If you want strongly consistent reads instead, you can set ConsistentRead to true for any or all tables. In order to minimize response latency, BatchGetItem retrieves items in parallel. When designing your application, keep in mind that DynamoDB does not return items in any particular order. To help parse the response by item, include the primary key values for the items in your request in the ProjectionExpression parameter. If a requested item does not exist, it is not returned in the result. Requests for nonexistent items consume the minimum read capacity units according to the type of read. For more information, see [Working with Tables](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#CapacityUnitCalculations) in the Amazon DynamoDB Developer Guide. + /// The BatchGetItem operation returns the attributes of one or more items from one or more tables. You identify requested items by primary key. A single operation can retrieve up to 16 MB of data, which can contain as many as 100 items. BatchGetItem returns a partial result if the response size limit is exceeded, the table's provisioned throughput is exceeded, or an internal processing failure occurs. If a partial result is returned, the operation returns a value for UnprocessedKeys. You can use this value to retry the operation starting with the next item to get. If you request more than 100 items, BatchGetItem returns a ValidationException with the message "Too many items requested for the BatchGetItem call." For example, if you ask to retrieve 100 items, but each individual item is 300 KB in size, the system returns 52 items (so as not to exceed the 16 MB limit). It also returns an appropriate UnprocessedKeys value so you can get the next page of results. If desired, your application can include its own logic to assemble the pages of results into one dataset. If none of the items can be processed due to insufficient provisioned throughput on all of the tables in the request, then BatchGetItem returns a ProvisionedThroughputExceededException. If at least one of the items is successfully processed, then BatchGetItem completes successfully, while returning the keys of the unread items in UnprocessedKeys. If DynamoDB returns any unprocessed items, you should retry the batch operation on those items. However, we strongly recommend that you use an exponential backoff algorithm. If you retry the batch operation immediately, the underlying read or write requests can still fail due to throttling on the individual tables. If you delay the batch operation using exponential backoff, the individual requests in the batch are much more likely to succeed. For more information, see [Batch Operations and Error Handling](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ErrorHandling.html#BatchOperations) in the Amazon DynamoDB Developer Guide. By default, BatchGetItem performs eventually consistent reads on every table in the request. If you want strongly consistent reads instead, you can set ConsistentRead to true for any or all tables. In order to minimize response latency, BatchGetItem may retrieve items in parallel. When designing your application, keep in mind that DynamoDB does not return items in any particular order. To help parse the response by item, include the primary key values for the items in your request in the ProjectionExpression parameter. If a requested item does not exist, it is not returned in the result. Requests for nonexistent items consume the minimum read capacity units according to the type of read. For more information, see [Working with Tables](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#CapacityUnitCalculations) in the Amazon DynamoDB Developer Guide. public func batchGetItem(input: BatchGetItemInput) async throws -> BatchGetItemOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1591,7 +1591,7 @@ extension DynamoDBClient: DynamoDBClientProtocol { return result } - /// Creates a new table from an existing backup. Any number of users can execute up to 4 concurrent restores (any type of restore) in a given account. You can call RestoreTableFromBackup at a maximum rate of 10 times per second. You must manually set up the following on the restored table: + /// Creates a new table from an existing backup. Any number of users can execute up to 50 concurrent restores (any type of restore) in a given account. You can call RestoreTableFromBackup at a maximum rate of 10 times per second. You must manually set up the following on the restored table: /// /// * Auto scaling policies /// diff --git a/Sources/Services/AWSDynamoDB/DynamoDBClientProtocol.swift b/Sources/Services/AWSDynamoDB/DynamoDBClientProtocol.swift index 78525425ba2..b20844de817 100644 --- a/Sources/Services/AWSDynamoDB/DynamoDBClientProtocol.swift +++ b/Sources/Services/AWSDynamoDB/DynamoDBClientProtocol.swift @@ -7,7 +7,7 @@ import ClientRuntime public protocol DynamoDBClientProtocol { /// This operation allows you to perform batch reads or writes on data stored in DynamoDB, using PartiQL. Each read statement in a BatchExecuteStatement must specify an equality condition on all key attributes. This enforces that each SELECT statement in a batch returns at most a single item. The entire batch must consist of either read statements or write statements, you cannot mix both in one batch. A HTTP 200 response does not mean that all statements in the BatchExecuteStatement succeeded. Error details for individual statements can be found under the [Error](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchStatementResponse.html#DDB-Type-BatchStatementResponse-Error) field of the BatchStatementResponse for each statement. func batchExecuteStatement(input: BatchExecuteStatementInput) async throws -> BatchExecuteStatementOutputResponse - /// The BatchGetItem operation returns the attributes of one or more items from one or more tables. You identify requested items by primary key. A single operation can retrieve up to 16 MB of data, which can contain as many as 100 items. BatchGetItem returns a partial result if the response size limit is exceeded, the table's provisioned throughput is exceeded, or an internal processing failure occurs. If a partial result is returned, the operation returns a value for UnprocessedKeys. You can use this value to retry the operation starting with the next item to get. If you request more than 100 items, BatchGetItem returns a ValidationException with the message "Too many items requested for the BatchGetItem call." For example, if you ask to retrieve 100 items, but each individual item is 300 KB in size, the system returns 52 items (so as not to exceed the 16 MB limit). It also returns an appropriate UnprocessedKeys value so you can get the next page of results. If desired, your application can include its own logic to assemble the pages of results into one dataset. If none of the items can be processed due to insufficient provisioned throughput on all of the tables in the request, then BatchGetItem returns a ProvisionedThroughputExceededException. If at least one of the items is successfully processed, then BatchGetItem completes successfully, while returning the keys of the unread items in UnprocessedKeys. If DynamoDB returns any unprocessed items, you should retry the batch operation on those items. However, we strongly recommend that you use an exponential backoff algorithm. If you retry the batch operation immediately, the underlying read or write requests can still fail due to throttling on the individual tables. If you delay the batch operation using exponential backoff, the individual requests in the batch are much more likely to succeed. For more information, see [Batch Operations and Error Handling](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ErrorHandling.html#BatchOperations) in the Amazon DynamoDB Developer Guide. By default, BatchGetItem performs eventually consistent reads on every table in the request. If you want strongly consistent reads instead, you can set ConsistentRead to true for any or all tables. In order to minimize response latency, BatchGetItem retrieves items in parallel. When designing your application, keep in mind that DynamoDB does not return items in any particular order. To help parse the response by item, include the primary key values for the items in your request in the ProjectionExpression parameter. If a requested item does not exist, it is not returned in the result. Requests for nonexistent items consume the minimum read capacity units according to the type of read. For more information, see [Working with Tables](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#CapacityUnitCalculations) in the Amazon DynamoDB Developer Guide. + /// The BatchGetItem operation returns the attributes of one or more items from one or more tables. You identify requested items by primary key. A single operation can retrieve up to 16 MB of data, which can contain as many as 100 items. BatchGetItem returns a partial result if the response size limit is exceeded, the table's provisioned throughput is exceeded, or an internal processing failure occurs. If a partial result is returned, the operation returns a value for UnprocessedKeys. You can use this value to retry the operation starting with the next item to get. If you request more than 100 items, BatchGetItem returns a ValidationException with the message "Too many items requested for the BatchGetItem call." For example, if you ask to retrieve 100 items, but each individual item is 300 KB in size, the system returns 52 items (so as not to exceed the 16 MB limit). It also returns an appropriate UnprocessedKeys value so you can get the next page of results. If desired, your application can include its own logic to assemble the pages of results into one dataset. If none of the items can be processed due to insufficient provisioned throughput on all of the tables in the request, then BatchGetItem returns a ProvisionedThroughputExceededException. If at least one of the items is successfully processed, then BatchGetItem completes successfully, while returning the keys of the unread items in UnprocessedKeys. If DynamoDB returns any unprocessed items, you should retry the batch operation on those items. However, we strongly recommend that you use an exponential backoff algorithm. If you retry the batch operation immediately, the underlying read or write requests can still fail due to throttling on the individual tables. If you delay the batch operation using exponential backoff, the individual requests in the batch are much more likely to succeed. For more information, see [Batch Operations and Error Handling](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ErrorHandling.html#BatchOperations) in the Amazon DynamoDB Developer Guide. By default, BatchGetItem performs eventually consistent reads on every table in the request. If you want strongly consistent reads instead, you can set ConsistentRead to true for any or all tables. In order to minimize response latency, BatchGetItem may retrieve items in parallel. When designing your application, keep in mind that DynamoDB does not return items in any particular order. To help parse the response by item, include the primary key values for the items in your request in the ProjectionExpression parameter. If a requested item does not exist, it is not returned in the result. Requests for nonexistent items consume the minimum read capacity units according to the type of read. For more information, see [Working with Tables](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#CapacityUnitCalculations) in the Amazon DynamoDB Developer Guide. func batchGetItem(input: BatchGetItemInput) async throws -> BatchGetItemOutputResponse /// The BatchWriteItem operation puts or deletes multiple items in one or more tables. A single call to BatchWriteItem can transmit up to 16MB of data over the network, consisting of up to 25 item put or delete operations. While individual items can be up to 400 KB once stored, it's important to note that an item's representation might be greater than 400KB while being sent in DynamoDB's JSON format for the API call. For more details on this distinction, see [Naming Rules and Data Types](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html). BatchWriteItem cannot update items. If you perform a BatchWriteItem operation on an existing item, that item's values will be overwritten by the operation and it will appear like it was updated. To update items, we recommend you use the UpdateItem action. The individual PutItem and DeleteItem operations specified in BatchWriteItem are atomic; however BatchWriteItem as a whole is not. If any requested operations fail because the table's provisioned throughput is exceeded or an internal processing failure occurs, the failed operations are returned in the UnprocessedItems response parameter. You can investigate and optionally resend the requests. Typically, you would call BatchWriteItem in a loop. Each iteration would check for unprocessed items and submit a new BatchWriteItem request with those unprocessed items until all items have been processed. If none of the items can be processed due to insufficient provisioned throughput on all of the tables in the request, then BatchWriteItem returns a ProvisionedThroughputExceededException. If DynamoDB returns any unprocessed items, you should retry the batch operation on those items. However, we strongly recommend that you use an exponential backoff algorithm. If you retry the batch operation immediately, the underlying read or write requests can still fail due to throttling on the individual tables. If you delay the batch operation using exponential backoff, the individual requests in the batch are much more likely to succeed. For more information, see [Batch Operations and Error Handling](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ErrorHandling.html#Programming.Errors.BatchOperations) in the Amazon DynamoDB Developer Guide. With BatchWriteItem, you can efficiently write or delete large amounts of data, such as from Amazon EMR, or copy data from another database into DynamoDB. In order to improve performance with these large-scale operations, BatchWriteItem does not behave in the same way as individual PutItem and DeleteItem calls would. For example, you cannot specify conditions on individual put and delete requests, and BatchWriteItem does not return deleted items in the response. If you use a programming language that supports concurrency, you can use threads to write items in parallel. Your application must include the necessary logic to manage the threads. With languages that don't support threading, you must update or delete the specified items one at a time. In both situations, BatchWriteItem performs the specified put and delete operations in parallel, giving you the power of the thread pool approach without having to introduce complexity into your application. Parallel processing reduces latency, but each specified put and delete request consumes the same number of write capacity units whether it is processed in parallel or not. Delete operations on nonexistent items consume one write capacity unit. If one or more of the following is true, DynamoDB rejects the entire batch write operation: /// @@ -150,7 +150,7 @@ public protocol DynamoDBClientProtocol { func putItem(input: PutItemInput) async throws -> PutItemOutputResponse /// You must provide the name of the partition key attribute and a single value for that attribute. Query returns all items with that partition key value. Optionally, you can provide a sort key attribute and use a comparison operator to refine the search results. Use the KeyConditionExpression parameter to provide a specific value for the partition key. The Query operation will return all of the items from the table or index with that partition key value. You can optionally narrow the scope of the Query operation by specifying a sort key value and a comparison operator in KeyConditionExpression. To further refine the Query results, you can optionally provide a FilterExpression. A FilterExpression determines which items within the results should be returned to you. All of the other results are discarded. A Query operation always returns a result set. If no matching items are found, the result set will be empty. Queries that do not return results consume the minimum number of read capacity units for that type of read operation. DynamoDB calculates the number of read capacity units consumed based on item size, not on the amount of data that is returned to an application. The number of capacity units consumed will be the same whether you request all of the attributes (the default behavior) or just some of them (using a projection expression). The number will also be the same whether or not you use a FilterExpression. Query results are always sorted by the sort key value. If the data type of the sort key is Number, the results are returned in numeric order; otherwise, the results are returned in order of UTF-8 bytes. By default, the sort order is ascending. To reverse the order, set the ScanIndexForward parameter to false. A single Query operation will read up to the maximum number of items set (if using the Limit parameter) or a maximum of 1 MB of data and then apply any filtering to the results using FilterExpression. If LastEvaluatedKey is present in the response, you will need to paginate the result set. For more information, see [Paginating the Results](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Query.html#Query.Pagination) in the Amazon DynamoDB Developer Guide. FilterExpression is applied after a Query finishes, but before the results are returned. A FilterExpression cannot contain partition key or sort key attributes. You need to specify those attributes in the KeyConditionExpression. A Query operation can return an empty result set and a LastEvaluatedKey if all the items read for the page of results are filtered out. You can query a table, a local secondary index, or a global secondary index. For a query on a table or on a local secondary index, you can set the ConsistentRead parameter to true and obtain a strongly consistent result. Global secondary indexes support eventually consistent reads only, so do not specify ConsistentRead when querying a global secondary index. func query(input: QueryInput) async throws -> QueryOutputResponse - /// Creates a new table from an existing backup. Any number of users can execute up to 4 concurrent restores (any type of restore) in a given account. You can call RestoreTableFromBackup at a maximum rate of 10 times per second. You must manually set up the following on the restored table: + /// Creates a new table from an existing backup. Any number of users can execute up to 50 concurrent restores (any type of restore) in a given account. You can call RestoreTableFromBackup at a maximum rate of 10 times per second. You must manually set up the following on the restored table: /// /// * Auto scaling policies /// diff --git a/Sources/Services/AWSDynamoDB/EndpointResolver.swift b/Sources/Services/AWSDynamoDB/EndpointResolver.swift index 7609a2887ad..3f1bd24d07c 100644 --- a/Sources/Services/AWSDynamoDB/EndpointResolver.swift +++ b/Sources/Services/AWSDynamoDB/EndpointResolver.swift @@ -35,7 +35,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://dynamodb-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[\"aws-us-gov\",{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]}]}],\"endpoint\":{\"url\":\"https://dynamodb.{Region}.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://dynamodb-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://dynamodb.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"local\"]}],\"endpoint\":{\"url\":\"http://localhost:8000\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"dynamodb\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://dynamodb.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" + private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://dynamodb-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[\"aws-us-gov\",{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]}]}],\"endpoint\":{\"url\":\"https://dynamodb.{Region}.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://dynamodb-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://dynamodb.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"local\"]}],\"endpoint\":{\"url\":\"http://localhost:8000\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"dynamodb\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://dynamodb.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSDynamoDBStreams/EndpointResolver.swift b/Sources/Services/AWSDynamoDBStreams/EndpointResolver.swift index 015a747735f..911dabec386 100644 --- a/Sources/Services/AWSDynamoDBStreams/EndpointResolver.swift +++ b/Sources/Services/AWSDynamoDBStreams/EndpointResolver.swift @@ -35,7 +35,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://streams.dynamodb-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[\"aws-us-gov\",{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]}]}],\"endpoint\":{\"url\":\"https://streams.dynamodb.{Region}.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://streams.dynamodb-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://streams.dynamodb.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"local\"]}],\"endpoint\":{\"url\":\"http://localhost:8000\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"dynamodb\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[\"aws\",{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]}]}],\"endpoint\":{\"url\":\"https://streams.dynamodb.{Region}.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[\"aws-cn\",{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]}]}],\"endpoint\":{\"url\":\"https://streams.dynamodb.{Region}.amazonaws.com.cn\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[\"aws-us-gov\",{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]}]}],\"endpoint\":{\"url\":\"https://streams.dynamodb.{Region}.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[\"aws-iso\",{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]}]}],\"endpoint\":{\"url\":\"https://streams.dynamodb.{Region}.c2s.ic.gov\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[\"aws-iso-b\",{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]}]}],\"endpoint\":{\"url\":\"https://streams.dynamodb.{Region}.sc2s.sgov.gov\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://streams.dynamodb.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" + private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://streams.dynamodb-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[\"aws-us-gov\",{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]}]}],\"endpoint\":{\"url\":\"https://streams.dynamodb.{Region}.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://streams.dynamodb-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://streams.dynamodb.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"local\"]}],\"endpoint\":{\"url\":\"http://localhost:8000\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"dynamodb\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[\"aws\",{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]}]}],\"endpoint\":{\"url\":\"https://streams.dynamodb.{Region}.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[\"aws-cn\",{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]}]}],\"endpoint\":{\"url\":\"https://streams.dynamodb.{Region}.amazonaws.com.cn\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[\"aws-us-gov\",{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]}]}],\"endpoint\":{\"url\":\"https://streams.dynamodb.{Region}.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[\"aws-iso\",{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]}]}],\"endpoint\":{\"url\":\"https://streams.dynamodb.{Region}.c2s.ic.gov\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[\"aws-iso-b\",{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]}]}],\"endpoint\":{\"url\":\"https://streams.dynamodb.{Region}.sc2s.sgov.gov\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://streams.dynamodb.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSECRPUBLIC/models/Models.swift b/Sources/Services/AWSECRPUBLIC/models/Models.swift index 4e16b7e386f..77f005d3131 100644 --- a/Sources/Services/AWSECRPUBLIC/models/Models.swift +++ b/Sources/Services/AWSECRPUBLIC/models/Models.swift @@ -265,7 +265,7 @@ public struct BatchDeleteImageInput: Swift.Equatable { /// A list of image ID references that correspond to images to delete. The format of the imageIds reference is imageTag=tag or imageDigest=digest. /// This member is required. public var imageIds: [ECRPUBLICClientTypes.ImageIdentifier]? - /// The Amazon Web Services account ID that's associated with the registry that contains the image to delete. If you do not specify a registry, the default public registry is assumed. + /// The Amazon Web Services account ID, or registry alias, that's associated with the registry that contains the image to delete. If you do not specify a registry, the default public registry is assumed. public var registryId: Swift.String? /// The repository in a public registry that contains the image to delete. /// This member is required. @@ -800,7 +800,7 @@ extension DeleteRepositoryInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if force != false { + if let force = self.force { try encodeContainer.encode(force, forKey: .force) } if let registryId = self.registryId { @@ -820,7 +820,7 @@ extension DeleteRepositoryInput: ClientRuntime.URLPathProvider { public struct DeleteRepositoryInput: Swift.Equatable { /// The force option can be used to delete a repository that contains images. If the force option is not used, the repository must be empty prior to deletion. - public var force: Swift.Bool + public var force: Swift.Bool? /// The Amazon Web Services account ID that's associated with the public registry that contains the repository to delete. If you do not specify a registry, the default public registry is assumed. public var registryId: Swift.String? /// The name of the repository to delete. @@ -828,7 +828,7 @@ public struct DeleteRepositoryInput: Swift.Equatable { public var repositoryName: Swift.String? public init ( - force: Swift.Bool = false, + force: Swift.Bool? = nil, registryId: Swift.String? = nil, repositoryName: Swift.String? = nil ) @@ -842,7 +842,7 @@ public struct DeleteRepositoryInput: Swift.Equatable { struct DeleteRepositoryInputBody: Swift.Equatable { let registryId: Swift.String? let repositoryName: Swift.String? - let force: Swift.Bool + let force: Swift.Bool? } extension DeleteRepositoryInputBody: Swift.Decodable { @@ -858,7 +858,7 @@ extension DeleteRepositoryInputBody: Swift.Decodable { registryId = registryIdDecoded let repositoryNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .repositoryName) repositoryName = repositoryNameDecoded - let forceDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .force) ?? false + let forceDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .force) force = forceDecoded } } @@ -5312,7 +5312,7 @@ extension SetRepositoryPolicyInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if force != false { + if let force = self.force { try encodeContainer.encode(force, forKey: .force) } if let policyText = self.policyText { @@ -5335,7 +5335,7 @@ extension SetRepositoryPolicyInput: ClientRuntime.URLPathProvider { public struct SetRepositoryPolicyInput: Swift.Equatable { /// If the policy that you want to set on a repository policy would prevent you from setting another policy in the future, you must force the [SetRepositoryPolicy] operation. This prevents accidental repository lockouts. - public var force: Swift.Bool + public var force: Swift.Bool? /// The JSON repository policy text to apply to the repository. For more information, see [Amazon ECR Repository Policies](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policy-examples.html) in the Amazon Elastic Container Registry User Guide. /// This member is required. public var policyText: Swift.String? @@ -5346,7 +5346,7 @@ public struct SetRepositoryPolicyInput: Swift.Equatable { public var repositoryName: Swift.String? public init ( - force: Swift.Bool = false, + force: Swift.Bool? = nil, policyText: Swift.String? = nil, registryId: Swift.String? = nil, repositoryName: Swift.String? = nil @@ -5363,7 +5363,7 @@ struct SetRepositoryPolicyInputBody: Swift.Equatable { let registryId: Swift.String? let repositoryName: Swift.String? let policyText: Swift.String? - let force: Swift.Bool + let force: Swift.Bool? } extension SetRepositoryPolicyInputBody: Swift.Decodable { @@ -5382,7 +5382,7 @@ extension SetRepositoryPolicyInputBody: Swift.Decodable { repositoryName = repositoryNameDecoded let policyTextDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .policyText) policyText = policyTextDecoded - let forceDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .force) ?? false + let forceDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .force) force = forceDecoded } } diff --git a/Sources/Services/AWSECS/models/Models.swift b/Sources/Services/AWSECS/models/Models.swift index cb5680b5d2b..49f3489a9aa 100644 --- a/Sources/Services/AWSECS/models/Models.swift +++ b/Sources/Services/AWSECS/models/Models.swift @@ -2561,7 +2561,7 @@ extension ECSClientTypes { public var dnsServers: [Swift.String]? /// A key/value map of labels to add to the container. This parameter maps to Labels in the [Create a container](https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.docker.com/engine/api/v1.35/) and the --label option to [docker run](https://docs.docker.com/engine/reference/run/#security-configuration). This parameter requires version 1.18 of the Docker Remote API or greater on your container instance. To check the Docker Remote API version on your container instance, log in to your container instance and run the following command: sudo docker version --format '{{.Server.APIVersion}}' public var dockerLabels: [Swift.String:Swift.String]? - /// A list of strings to provide custom labels for SELinux and AppArmor multi-level security systems. This field isn't valid for containers in tasks using the Fargate launch type. With Windows containers, this parameter can be used to reference a credential spec file when configuring a container for Active Directory authentication. For more information, see [Using gMSAs for Windows Containers](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/windows-gmsa.html) in the Amazon Elastic Container Service Developer Guide. This parameter maps to SecurityOpt in the [Create a container](https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.docker.com/engine/api/v1.35/) and the --security-opt option to [docker run](https://docs.docker.com/engine/reference/run/#security-configuration). The Amazon ECS container agent running on a container instance must register with the ECS_SELINUX_CAPABLE=true or ECS_APPARMOR_CAPABLE=true environment variables before containers placed on that instance can use these security options. 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. For more information about valid values, see [Docker Run Security Configuration](https://docs.docker.com/engine/reference/run/#security-configuration). Valid values: "no-new-privileges" | "apparmor:PROFILE" | "label:value" | "credentialspec:CredentialSpecFilePath" + /// A list of strings to provide custom configuration for multiple security systems. For more information about valid values, see [Docker Run Security Configuration](https://docs.docker.com/engine/reference/run/#security-configuration). This field isn't valid for containers in tasks using the Fargate launch type. For Linux tasks on EC2, this parameter can be used to reference custom labels for SELinux and AppArmor multi-level security systems. For any tasks on EC2, this parameter can be used to reference a credential spec file that configures a container for Active Directory authentication. For more information, see [Using gMSAs for Windows Containers](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/windows-gmsa.html) and [Using gMSAs for Linux Containers](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/linux-gmsa.html) in the Amazon Elastic Container Service Developer Guide. This parameter maps to SecurityOpt in the [Create a container](https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.docker.com/engine/api/v1.35/) and the --security-opt option to [docker run](https://docs.docker.com/engine/reference/run/#security-configuration). The Amazon ECS container agent running on a container instance must register with the ECS_SELINUX_CAPABLE=true or ECS_APPARMOR_CAPABLE=true environment variables before containers placed on that instance can use these security options. 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. For more information about valid values, see [Docker Run Security Configuration](https://docs.docker.com/engine/reference/run/#security-configuration). Valid values: "no-new-privileges" | "apparmor:PROFILE" | "label:value" | "credentialspec:CredentialSpecFilePath" public var dockerSecurityOptions: [Swift.String]? /// Early versions of the Amazon ECS container agent don't properly handle entryPoint parameters. If you have problems using entryPoint, update your container agent or enter your commands and arguments as command array items instead. The entry point that's passed to the container. This parameter maps to Entrypoint in the [Create a container](https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.docker.com/engine/api/v1.35/) and the --entrypoint option to [docker run](https://docs.docker.com/engine/reference/run/#security-configuration). For more information, see [https://docs.docker.com/engine/reference/builder/#entrypoint](https://docs.docker.com/engine/reference/builder/#entrypoint). public var entryPoint: [Swift.String]? diff --git a/Sources/Services/AWSEMRServerless/EMRServerlessClient.swift b/Sources/Services/AWSEMRServerless/EMRServerlessClient.swift index 3a021a404b1..177be7b2589 100644 --- a/Sources/Services/AWSEMRServerless/EMRServerlessClient.swift +++ b/Sources/Services/AWSEMRServerless/EMRServerlessClient.swift @@ -269,7 +269,7 @@ extension EMRServerlessClient: EMRServerlessClientProtocol { return result } - /// Returns a URL to access the job run dashboard. + /// Returns a URL to access the job run dashboard. The generated URL is valid for one hour, after which you must invoke the API again to generate a new URL. public func getDashboardForJobRun(input: GetDashboardForJobRunInput) async throws -> GetDashboardForJobRunOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -538,7 +538,7 @@ extension EMRServerlessClient: EMRServerlessClientProtocol { return result } - /// Assigns tags to resources. A tag is a label that you assign to an AWS resource. Each tag consists of a key and an optional value, both of which you define. Tags enable you to categorize your AWS resources by attributes such as purpose, owner, or environment. When you have many resources of the same type, you can quickly identify a specific resource based on the tags you've assigned to it. + /// Assigns tags to resources. A tag is a label that you assign to an Amazon Web Services resource. Each tag consists of a key and an optional value, both of which you define. Tags enable you to categorize your Amazon Web Services resources by attributes such as purpose, owner, or environment. When you have many resources of the same type, you can quickly identify a specific resource based on the tags you've assigned to it. public func tagResource(input: TagResourceInput) async throws -> TagResourceOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSEMRServerless/EMRServerlessClientProtocol.swift b/Sources/Services/AWSEMRServerless/EMRServerlessClientProtocol.swift index 8b2b27ae8bb..9ec75232c62 100644 --- a/Sources/Services/AWSEMRServerless/EMRServerlessClientProtocol.swift +++ b/Sources/Services/AWSEMRServerless/EMRServerlessClientProtocol.swift @@ -19,7 +19,7 @@ public protocol EMRServerlessClientProtocol { func deleteApplication(input: DeleteApplicationInput) async throws -> DeleteApplicationOutputResponse /// Displays detailed information about a specified application. func getApplication(input: GetApplicationInput) async throws -> GetApplicationOutputResponse - /// Returns a URL to access the job run dashboard. + /// Returns a URL to access the job run dashboard. The generated URL is valid for one hour, after which you must invoke the API again to generate a new URL. func getDashboardForJobRun(input: GetDashboardForJobRunInput) async throws -> GetDashboardForJobRunOutputResponse /// Displays detailed information about a job run. func getJobRun(input: GetJobRunInput) async throws -> GetJobRunOutputResponse @@ -35,7 +35,7 @@ public protocol EMRServerlessClientProtocol { func startJobRun(input: StartJobRunInput) async throws -> StartJobRunOutputResponse /// Stops a specified application and releases initial capacity if configured. All scheduled and running jobs must be completed or cancelled before stopping an application. func stopApplication(input: StopApplicationInput) async throws -> StopApplicationOutputResponse - /// Assigns tags to resources. A tag is a label that you assign to an AWS resource. Each tag consists of a key and an optional value, both of which you define. Tags enable you to categorize your AWS resources by attributes such as purpose, owner, or environment. When you have many resources of the same type, you can quickly identify a specific resource based on the tags you've assigned to it. + /// Assigns tags to resources. A tag is a label that you assign to an Amazon Web Services resource. Each tag consists of a key and an optional value, both of which you define. Tags enable you to categorize your Amazon Web Services resources by attributes such as purpose, owner, or environment. When you have many resources of the same type, you can quickly identify a specific resource based on the tags you've assigned to it. func tagResource(input: TagResourceInput) async throws -> TagResourceOutputResponse /// Removes tags from resources. func untagResource(input: UntagResourceInput) async throws -> UntagResourceOutputResponse diff --git a/Sources/Services/AWSEMRServerless/models/Models.swift b/Sources/Services/AWSEMRServerless/models/Models.swift index 114e0480097..ee11b4ea87e 100644 --- a/Sources/Services/AWSEMRServerless/models/Models.swift +++ b/Sources/Services/AWSEMRServerless/models/Models.swift @@ -1846,10 +1846,12 @@ extension EMRServerlessClientTypes.JobRun: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case applicationId case arn + case billedResourceUtilization case configurationOverrides case createdAt case createdBy case executionRole + case executionTimeoutMinutes case jobDriver case jobRunId case name @@ -1871,6 +1873,9 @@ extension EMRServerlessClientTypes.JobRun: Swift.Codable { if let arn = self.arn { try encodeContainer.encode(arn, forKey: .arn) } + if let billedResourceUtilization = self.billedResourceUtilization { + try encodeContainer.encode(billedResourceUtilization, forKey: .billedResourceUtilization) + } if let configurationOverrides = self.configurationOverrides { try encodeContainer.encode(configurationOverrides, forKey: .configurationOverrides) } @@ -1883,6 +1888,9 @@ extension EMRServerlessClientTypes.JobRun: Swift.Codable { if let executionRole = self.executionRole { try encodeContainer.encode(executionRole, forKey: .executionRole) } + if let executionTimeoutMinutes = self.executionTimeoutMinutes { + try encodeContainer.encode(executionTimeoutMinutes, forKey: .executionTimeoutMinutes) + } if let jobDriver = self.jobDriver { try encodeContainer.encode(jobDriver, forKey: .jobDriver) } @@ -1966,6 +1974,10 @@ extension EMRServerlessClientTypes.JobRun: Swift.Codable { networkConfiguration = networkConfigurationDecoded let totalExecutionDurationSecondsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .totalExecutionDurationSeconds) totalExecutionDurationSeconds = totalExecutionDurationSecondsDecoded + let executionTimeoutMinutesDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .executionTimeoutMinutes) + executionTimeoutMinutes = executionTimeoutMinutesDecoded + let billedResourceUtilizationDecoded = try containerValues.decodeIfPresent(EMRServerlessClientTypes.ResourceUtilization.self, forKey: .billedResourceUtilization) + billedResourceUtilization = billedResourceUtilizationDecoded } } @@ -1978,6 +1990,8 @@ extension EMRServerlessClientTypes { /// The execution role ARN of the job run. /// This member is required. public var arn: Swift.String? + /// The aggregate vCPU, memory, and storage that AWS has billed for the job run. The billed resources include a 1-minute minimum usage for workers, plus additional storage over 20 GB per worker. Note that billed resources do not include usage for idle pre-initialized workers. + public var billedResourceUtilization: EMRServerlessClientTypes.ResourceUtilization? /// The configuration settings that are used to override default configuration. public var configurationOverrides: EMRServerlessClientTypes.ConfigurationOverrides? /// The date and time when the job run was created. @@ -1989,6 +2003,8 @@ extension EMRServerlessClientTypes { /// The execution role ARN of the job run. /// This member is required. public var executionRole: Swift.String? + /// Returns the job run timeout value from the StartJobRun call. If no timeout was specified, then it returns the default timeout of 720 minutes. + public var executionTimeoutMinutes: Swift.Int? /// The job driver for the job run. /// This member is required. public var jobDriver: EMRServerlessClientTypes.JobDriver? @@ -2012,7 +2028,7 @@ extension EMRServerlessClientTypes { public var tags: [Swift.String:Swift.String]? /// The job run total execution duration in seconds. This field is only available for job runs in a COMPLETED, FAILED, or CANCELLED state. public var totalExecutionDurationSeconds: Swift.Int? - /// The aggregate vCPU, memory, and storage resources used from the time job start executing till the time job is terminated, rounded up to the nearest second. + /// The aggregate vCPU, memory, and storage resources used from the time the job starts to execute, until the time the job terminates, rounded up to the nearest second. public var totalResourceUtilization: EMRServerlessClientTypes.TotalResourceUtilization? /// The date and time when the job run was updated. /// This member is required. @@ -2021,10 +2037,12 @@ extension EMRServerlessClientTypes { public init ( applicationId: Swift.String? = nil, arn: Swift.String? = nil, + billedResourceUtilization: EMRServerlessClientTypes.ResourceUtilization? = nil, configurationOverrides: EMRServerlessClientTypes.ConfigurationOverrides? = nil, createdAt: ClientRuntime.Date? = nil, createdBy: Swift.String? = nil, executionRole: Swift.String? = nil, + executionTimeoutMinutes: Swift.Int? = nil, jobDriver: EMRServerlessClientTypes.JobDriver? = nil, jobRunId: Swift.String? = nil, name: Swift.String? = nil, @@ -2040,10 +2058,12 @@ extension EMRServerlessClientTypes { { self.applicationId = applicationId self.arn = arn + self.billedResourceUtilization = billedResourceUtilization self.configurationOverrides = configurationOverrides self.createdAt = createdAt self.createdBy = createdBy self.executionRole = executionRole + self.executionTimeoutMinutes = executionTimeoutMinutes self.jobDriver = jobDriver self.jobRunId = jobRunId self.name = name @@ -2951,6 +2971,61 @@ extension ResourceNotFoundExceptionBody: Swift.Decodable { } } +extension EMRServerlessClientTypes.ResourceUtilization: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case memoryGBHour + case storageGBHour + case vCPUHour + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let memoryGBHour = self.memoryGBHour { + try encodeContainer.encode(memoryGBHour, forKey: .memoryGBHour) + } + if let storageGBHour = self.storageGBHour { + try encodeContainer.encode(storageGBHour, forKey: .storageGBHour) + } + if let vCPUHour = self.vCPUHour { + try encodeContainer.encode(vCPUHour, forKey: .vCPUHour) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let vCPUHourDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .vCPUHour) + vCPUHour = vCPUHourDecoded + let memoryGBHourDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .memoryGBHour) + memoryGBHour = memoryGBHourDecoded + let storageGBHourDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .storageGBHour) + storageGBHour = storageGBHourDecoded + } +} + +extension EMRServerlessClientTypes { + /// The resource utilization for memory, storage, and vCPU for jobs. + public struct ResourceUtilization: Swift.Equatable { + /// The aggregated memory used per hour from the time the job starts executing until the job is terminated. + public var memoryGBHour: Swift.Double? + /// The aggregated storage used per hour from the time the job starts executing until the job is terminated. + public var storageGBHour: Swift.Double? + /// The aggregated vCPU used per hour from the time the job starts executing until the job is terminated. + public var vCPUHour: Swift.Double? + + public init ( + memoryGBHour: Swift.Double? = nil, + storageGBHour: Swift.Double? = nil, + vCPUHour: Swift.Double? = nil + ) + { + self.memoryGBHour = memoryGBHour + self.storageGBHour = storageGBHour + self.vCPUHour = vCPUHour + } + } + +} + extension EMRServerlessClientTypes.S3MonitoringConfiguration: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case encryptionKeyArn @@ -3381,7 +3456,7 @@ public struct StartJobRunOutputResponse: Swift.Equatable { /// This output displays the application ID on which the job run was submitted. /// This member is required. public var applicationId: Swift.String? - /// The output lists the execution role ARN of the job run. + /// This output displays the ARN of the job run.. /// This member is required. public var arn: Swift.String? /// The output contains the ID of the started job run. @@ -4000,7 +4075,7 @@ extension ValidationException { } } -/// The input fails to satisfy the constraints specified by an AWS service. +/// The input fails to satisfy the constraints specified by an Amazon Web Services service. public struct ValidationException: AWSClientRuntime.AWSHttpServiceError, Swift.Equatable { public var _headers: ClientRuntime.Headers? public var _statusCode: ClientRuntime.HttpStatusCode? diff --git a/Sources/Services/AWSEventBridge/EndpointResolver.swift b/Sources/Services/AWSEventBridge/EndpointResolver.swift index 1dfcf65e3d9..1a049acaa3a 100644 --- a/Sources/Services/AWSEventBridge/EndpointResolver.swift +++ b/Sources/Services/AWSEventBridge/EndpointResolver.swift @@ -39,7 +39,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private 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\"},\"EndpointId\":{\"required\":false,\"documentation\":\"Operation parameter for EndpointId\",\"type\":\"String\"}},\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"EndpointId\"}]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]},{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"EndpointId\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}],\"endpoint\":{\"url\":{\"ref\":\"Endpoint\"},\"properties\":{\"authSchemes\":[{\"name\":\"sigv4a\",\"signingRegionSet\":[\"*\"],\"signingName\":\"events\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://{EndpointId}.endpoint.events.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4a\",\"signingRegionSet\":[\"*\"],\"signingName\":\"events\"}]},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{EndpointId}.endpoint.events.{PartitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4a\",\"signingRegionSet\":[\"*\"],\"signingName\":\"events\"}]},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: FIPS is not supported with EventBridge multi-region endpoints.\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"EndpointId must be a valid host label.\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://events-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-gov-east-1\"]}],\"endpoint\":{\"url\":\"https://events.us-gov-east-1.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-gov-west-1\"]}],\"endpoint\":{\"url\":\"https://events.us-gov-west-1.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://events-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://events.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://events.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" + private 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\"},\"EndpointId\":{\"required\":false,\"documentation\":\"Operation parameter for EndpointId\",\"type\":\"String\"}},\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"EndpointId\"}]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]},{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"EndpointId\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}],\"endpoint\":{\"url\":{\"ref\":\"Endpoint\"},\"properties\":{\"authSchemes\":[{\"name\":\"sigv4a\",\"signingName\":\"events\",\"signingRegionSet\":[\"*\"]}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://{EndpointId}.endpoint.events.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4a\",\"signingName\":\"events\",\"signingRegionSet\":[\"*\"]}]},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{EndpointId}.endpoint.events.{PartitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4a\",\"signingName\":\"events\",\"signingRegionSet\":[\"*\"]}]},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: FIPS is not supported with EventBridge multi-region endpoints.\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"EndpointId must be a valid host label.\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://events-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-gov-east-1\"]}],\"endpoint\":{\"url\":\"https://events.us-gov-east-1.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-gov-west-1\"]}],\"endpoint\":{\"url\":\"https://events.us-gov-west-1.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://events-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://events.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://events.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSEventBridge/models/Models.swift b/Sources/Services/AWSEventBridge/models/Models.swift index 0985645cdf0..9064ac0d942 100644 --- a/Sources/Services/AWSEventBridge/models/Models.swift +++ b/Sources/Services/AWSEventBridge/models/Models.swift @@ -3990,7 +3990,7 @@ extension DeleteRuleInput: Swift.Encodable { if let eventBusName = self.eventBusName { try encodeContainer.encode(eventBusName, forKey: .eventBusName) } - if force != false { + if let force = self.force { try encodeContainer.encode(force, forKey: .force) } if let name = self.name { @@ -4009,14 +4009,14 @@ public struct DeleteRuleInput: Swift.Equatable { /// The name or ARN of the event bus associated with the rule. If you omit this, the default event bus is used. public var eventBusName: Swift.String? /// If this is a managed rule, created by an Amazon Web Services service on your behalf, you must specify Force as True to delete the rule. This parameter is ignored for rules that are not managed rules. You can check whether a rule is a managed rule by using DescribeRule or ListRules and checking the ManagedBy field of the response. - public var force: Swift.Bool + public var force: Swift.Bool? /// The name of the rule. /// This member is required. public var name: Swift.String? public init ( eventBusName: Swift.String? = nil, - force: Swift.Bool = false, + force: Swift.Bool? = nil, name: Swift.String? = nil ) { @@ -4029,7 +4029,7 @@ public struct DeleteRuleInput: Swift.Equatable { struct DeleteRuleInputBody: Swift.Equatable { let name: Swift.String? let eventBusName: Swift.String? - let force: Swift.Bool + let force: Swift.Bool? } extension DeleteRuleInputBody: Swift.Decodable { @@ -4045,7 +4045,7 @@ extension DeleteRuleInputBody: Swift.Decodable { name = nameDecoded let eventBusNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .eventBusName) eventBusName = eventBusNameDecoded - let forceDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .force) ?? false + let forceDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .force) force = forceDecoded } } @@ -11051,6 +11051,7 @@ extension EventBridgeClientTypes.RedshiftDataParameters: Swift.Codable { case dbUser = "DbUser" case secretManagerArn = "SecretManagerArn" case sql = "Sql" + case sqls = "Sqls" case statementName = "StatementName" case withEvent = "WithEvent" } @@ -11069,6 +11070,12 @@ extension EventBridgeClientTypes.RedshiftDataParameters: Swift.Codable { if let sql = self.sql { try encodeContainer.encode(sql, forKey: .sql) } + if let sqls = sqls { + var sqlsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .sqls) + for sql0 in sqls { + try sqlsContainer.encode(sql0) + } + } if let statementName = self.statementName { try encodeContainer.encode(statementName, forKey: .statementName) } @@ -11091,9 +11098,25 @@ extension EventBridgeClientTypes.RedshiftDataParameters: Swift.Codable { statementName = statementNameDecoded let withEventDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .withEvent) ?? false withEvent = withEventDecoded + let sqlsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .sqls) + var sqlsDecoded0:[Swift.String]? = nil + if let sqlsContainer = sqlsContainer { + sqlsDecoded0 = [Swift.String]() + for string0 in sqlsContainer { + if let string0 = string0 { + sqlsDecoded0?.append(string0) + } + } + } + sqls = sqlsDecoded0 } } +extension EventBridgeClientTypes.RedshiftDataParameters: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "RedshiftDataParameters(database: \(Swift.String(describing: database)), dbUser: \(Swift.String(describing: dbUser)), secretManagerArn: \(Swift.String(describing: secretManagerArn)), statementName: \(Swift.String(describing: statementName)), withEvent: \(Swift.String(describing: withEvent)), sql: \"CONTENT_REDACTED\", sqls: \"CONTENT_REDACTED\")"} +} + extension EventBridgeClientTypes { /// These are custom parameters to be used when the target is a Amazon Redshift cluster or Redshift Serverless workgroup to invoke the Amazon Redshift Data API ExecuteStatement based on EventBridge events. public struct RedshiftDataParameters: Swift.Equatable { @@ -11105,8 +11128,9 @@ extension EventBridgeClientTypes { /// The name or ARN of the secret that enables access to the database. Required when authenticating using Amazon Web Services Secrets Manager. public var secretManagerArn: Swift.String? /// The SQL statement text to run. - /// This member is required. public var sql: Swift.String? + /// A list of SQLs. + public var sqls: [Swift.String]? /// The name of the SQL statement. You can name the SQL statement when you create it to identify the query. public var statementName: Swift.String? /// Indicates whether to send an event back to EventBridge after the SQL statement runs. @@ -11117,6 +11141,7 @@ extension EventBridgeClientTypes { dbUser: Swift.String? = nil, secretManagerArn: Swift.String? = nil, sql: Swift.String? = nil, + sqls: [Swift.String]? = nil, statementName: Swift.String? = nil, withEvent: Swift.Bool = false ) @@ -11125,6 +11150,7 @@ extension EventBridgeClientTypes { self.dbUser = dbUser self.secretManagerArn = secretManagerArn self.sql = sql + self.sqls = sqls self.statementName = statementName self.withEvent = withEvent } @@ -11144,7 +11170,7 @@ extension RemovePermissionInput: Swift.Encodable { if let eventBusName = self.eventBusName { try encodeContainer.encode(eventBusName, forKey: .eventBusName) } - if removeAllPermissions != false { + if let removeAllPermissions = self.removeAllPermissions { try encodeContainer.encode(removeAllPermissions, forKey: .removeAllPermissions) } if let statementId = self.statementId { @@ -11163,13 +11189,13 @@ public struct RemovePermissionInput: Swift.Equatable { /// The name of the event bus to revoke permissions for. If you omit this, the default event bus is used. public var eventBusName: Swift.String? /// Specifies whether to remove all permissions. - public var removeAllPermissions: Swift.Bool + public var removeAllPermissions: Swift.Bool? /// The statement ID corresponding to the account that is no longer allowed to put events to the default event bus. public var statementId: Swift.String? public init ( eventBusName: Swift.String? = nil, - removeAllPermissions: Swift.Bool = false, + removeAllPermissions: Swift.Bool? = nil, statementId: Swift.String? = nil ) { @@ -11181,7 +11207,7 @@ public struct RemovePermissionInput: Swift.Equatable { struct RemovePermissionInputBody: Swift.Equatable { let statementId: Swift.String? - let removeAllPermissions: Swift.Bool + let removeAllPermissions: Swift.Bool? let eventBusName: Swift.String? } @@ -11196,7 +11222,7 @@ extension RemovePermissionInputBody: Swift.Decodable { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let statementIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .statementId) statementId = statementIdDecoded - let removeAllPermissionsDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .removeAllPermissions) ?? false + let removeAllPermissionsDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .removeAllPermissions) removeAllPermissions = removeAllPermissionsDecoded let eventBusNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .eventBusName) eventBusName = eventBusNameDecoded @@ -11254,7 +11280,7 @@ extension RemoveTargetsInput: Swift.Encodable { if let eventBusName = self.eventBusName { try encodeContainer.encode(eventBusName, forKey: .eventBusName) } - if force != false { + if let force = self.force { try encodeContainer.encode(force, forKey: .force) } if let ids = ids { @@ -11279,7 +11305,7 @@ public struct RemoveTargetsInput: Swift.Equatable { /// The name or ARN of the event bus associated with the rule. If you omit this, the default event bus is used. public var eventBusName: Swift.String? /// If this is a managed rule, created by an Amazon Web Services service on your behalf, you must specify Force as True to remove targets. This parameter is ignored for rules that are not managed rules. You can check whether a rule is a managed rule by using DescribeRule or ListRules and checking the ManagedBy field of the response. - public var force: Swift.Bool + public var force: Swift.Bool? /// The IDs of the targets to remove from the rule. /// This member is required. public var ids: [Swift.String]? @@ -11289,7 +11315,7 @@ public struct RemoveTargetsInput: Swift.Equatable { public init ( eventBusName: Swift.String? = nil, - force: Swift.Bool = false, + force: Swift.Bool? = nil, ids: [Swift.String]? = nil, rule: Swift.String? = nil ) @@ -11305,7 +11331,7 @@ struct RemoveTargetsInputBody: Swift.Equatable { let rule: Swift.String? let eventBusName: Swift.String? let ids: [Swift.String]? - let force: Swift.Bool + let force: Swift.Bool? } extension RemoveTargetsInputBody: Swift.Decodable { @@ -11333,7 +11359,7 @@ extension RemoveTargetsInputBody: Swift.Decodable { } } ids = idsDecoded0 - let forceDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .force) ?? false + let forceDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .force) force = forceDecoded } } diff --git a/Sources/Services/AWSGreengrass/EndpointResolver.swift b/Sources/Services/AWSGreengrass/EndpointResolver.swift index f9678cd3907..bc8c3ec6c3f 100644 --- a/Sources/Services/AWSGreengrass/EndpointResolver.swift +++ b/Sources/Services/AWSGreengrass/EndpointResolver.swift @@ -35,7 +35,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://greengrass-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-gov-east-1\"]}],\"endpoint\":{\"url\":\"https://greengrass.us-gov-east-1.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-gov-west-1\"]}],\"endpoint\":{\"url\":\"https://greengrass.us-gov-west-1.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://greengrass-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://greengrass.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"dataplane-us-gov-east-1\"]}],\"endpoint\":{\"url\":\"https://greengrass-ats.iot.us-gov-east-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-gov-east-1\",\"signingName\":\"greengrass\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"dataplane-us-gov-west-1\"]}],\"endpoint\":{\"url\":\"https://greengrass-ats.iot.us-gov-west-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-gov-west-1\",\"signingName\":\"greengrass\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://greengrass.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" + private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://greengrass-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-gov-east-1\"]}],\"endpoint\":{\"url\":\"https://greengrass.us-gov-east-1.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-gov-west-1\"]}],\"endpoint\":{\"url\":\"https://greengrass.us-gov-west-1.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://greengrass-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://greengrass.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"dataplane-us-gov-east-1\"]}],\"endpoint\":{\"url\":\"https://greengrass-ats.iot.us-gov-east-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"greengrass\",\"signingRegion\":\"us-gov-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"dataplane-us-gov-west-1\"]}],\"endpoint\":{\"url\":\"https://greengrass-ats.iot.us-gov-west-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"greengrass\",\"signingRegion\":\"us-gov-west-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://greengrass.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSGreengrassV2/EndpointResolver.swift b/Sources/Services/AWSGreengrassV2/EndpointResolver.swift index f9678cd3907..bc8c3ec6c3f 100644 --- a/Sources/Services/AWSGreengrassV2/EndpointResolver.swift +++ b/Sources/Services/AWSGreengrassV2/EndpointResolver.swift @@ -35,7 +35,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://greengrass-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-gov-east-1\"]}],\"endpoint\":{\"url\":\"https://greengrass.us-gov-east-1.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-gov-west-1\"]}],\"endpoint\":{\"url\":\"https://greengrass.us-gov-west-1.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://greengrass-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://greengrass.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"dataplane-us-gov-east-1\"]}],\"endpoint\":{\"url\":\"https://greengrass-ats.iot.us-gov-east-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-gov-east-1\",\"signingName\":\"greengrass\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"dataplane-us-gov-west-1\"]}],\"endpoint\":{\"url\":\"https://greengrass-ats.iot.us-gov-west-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-gov-west-1\",\"signingName\":\"greengrass\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://greengrass.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" + private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://greengrass-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-gov-east-1\"]}],\"endpoint\":{\"url\":\"https://greengrass.us-gov-east-1.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-gov-west-1\"]}],\"endpoint\":{\"url\":\"https://greengrass.us-gov-west-1.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://greengrass-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://greengrass.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"dataplane-us-gov-east-1\"]}],\"endpoint\":{\"url\":\"https://greengrass-ats.iot.us-gov-east-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"greengrass\",\"signingRegion\":\"us-gov-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"dataplane-us-gov-west-1\"]}],\"endpoint\":{\"url\":\"https://greengrass-ats.iot.us-gov-west-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"greengrass\",\"signingRegion\":\"us-gov-west-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://greengrass.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSGroundStation/GroundStationClient.swift b/Sources/Services/AWSGroundStation/GroundStationClient.swift index cedd7fcda4d..3199827afd7 100644 --- a/Sources/Services/AWSGroundStation/GroundStationClient.swift +++ b/Sources/Services/AWSGroundStation/GroundStationClient.swift @@ -494,7 +494,7 @@ extension GroundStationClient: GroundStationClientProtocol { return result } - /// Gets the latest configuration information for a registered agent. + /// For use by AWS Ground Station Agent and shouldn't be called directly. Gets the latest configuration information for a registered agent. public func getAgentConfiguration(input: GetAgentConfigurationInput) async throws -> GetAgentConfigurationOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -957,7 +957,7 @@ extension GroundStationClient: GroundStationClientProtocol { return result } - /// Registers a new agent with AWS Groundstation. + /// For use by AWS Ground Station Agent and shouldn't be called directly. Registers a new agent with AWS Ground Station. public func registerAgent(input: RegisterAgentInput) async throws -> RegisterAgentOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1095,7 +1095,7 @@ extension GroundStationClient: GroundStationClientProtocol { return result } - /// Update the status of the agent. + /// For use by AWS Ground Station Agent and shouldn't be called directly. Update the status of the agent. public func updateAgentStatus(input: UpdateAgentStatusInput) async throws -> UpdateAgentStatusOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSGroundStation/GroundStationClientProtocol.swift b/Sources/Services/AWSGroundStation/GroundStationClientProtocol.swift index f63e53a5874..31c67ae0c2a 100644 --- a/Sources/Services/AWSGroundStation/GroundStationClientProtocol.swift +++ b/Sources/Services/AWSGroundStation/GroundStationClientProtocol.swift @@ -27,7 +27,7 @@ public protocol GroundStationClientProtocol { func describeContact(input: DescribeContactInput) async throws -> DescribeContactOutputResponse /// Describes an existing ephemeris. func describeEphemeris(input: DescribeEphemerisInput) async throws -> DescribeEphemerisOutputResponse - /// Gets the latest configuration information for a registered agent. + /// For use by AWS Ground Station Agent and shouldn't be called directly. Gets the latest configuration information for a registered agent. func getAgentConfiguration(input: GetAgentConfigurationInput) async throws -> GetAgentConfigurationOutputResponse /// Returns Config information. Only one Config response can be returned. func getConfig(input: GetConfigInput) async throws -> GetConfigOutputResponse @@ -55,7 +55,7 @@ public protocol GroundStationClientProtocol { func listSatellites(input: ListSatellitesInput) async throws -> ListSatellitesOutputResponse /// Returns a list of tags for a specified resource. func listTagsForResource(input: ListTagsForResourceInput) async throws -> ListTagsForResourceOutputResponse - /// Registers a new agent with AWS Groundstation. + /// For use by AWS Ground Station Agent and shouldn't be called directly. Registers a new agent with AWS Ground Station. func registerAgent(input: RegisterAgentInput) async throws -> RegisterAgentOutputResponse /// Reserves a contact using specified parameters. func reserveContact(input: ReserveContactInput) async throws -> ReserveContactOutputResponse @@ -63,7 +63,7 @@ public protocol GroundStationClientProtocol { func tagResource(input: TagResourceInput) async throws -> TagResourceOutputResponse /// Deassigns a resource tag. func untagResource(input: UntagResourceInput) async throws -> UntagResourceOutputResponse - /// Update the status of the agent. + /// For use by AWS Ground Station Agent and shouldn't be called directly. Update the status of the agent. func updateAgentStatus(input: UpdateAgentStatusInput) async throws -> UpdateAgentStatusOutputResponse /// Updates the Config used when scheduling contacts. Updating a Config will not update the execution parameters for existing future contacts scheduled with this Config. func updateConfig(input: UpdateConfigInput) async throws -> UpdateConfigOutputResponse diff --git a/Sources/Services/AWSGroundStation/models/Models.swift b/Sources/Services/AWSGroundStation/models/Models.swift index 831ef8c2c98..4a02e21e7b3 100644 --- a/Sources/Services/AWSGroundStation/models/Models.swift +++ b/Sources/Services/AWSGroundStation/models/Models.swift @@ -4,6 +4,7 @@ import ClientRuntime extension GroundStationClientTypes.AgentDetails: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case agentCpuCores case agentVersion case componentVersions case instanceId @@ -13,6 +14,12 @@ extension GroundStationClientTypes.AgentDetails: Swift.Codable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let agentCpuCores = agentCpuCores { + var agentCpuCoresContainer = encodeContainer.nestedUnkeyedContainer(forKey: .agentCpuCores) + for integer0 in agentCpuCores { + try agentCpuCoresContainer.encode(integer0) + } + } if let agentVersion = self.agentVersion { try encodeContainer.encode(agentVersion, forKey: .agentVersion) } @@ -55,6 +62,17 @@ extension GroundStationClientTypes.AgentDetails: Swift.Codable { } } reservedCpuCores = reservedCpuCoresDecoded0 + let agentCpuCoresContainer = try containerValues.decodeIfPresent([Swift.Int?].self, forKey: .agentCpuCores) + var agentCpuCoresDecoded0:[Swift.Int]? = nil + if let agentCpuCoresContainer = agentCpuCoresContainer { + agentCpuCoresDecoded0 = [Swift.Int]() + for integer0 in agentCpuCoresContainer { + if let integer0 = integer0 { + agentCpuCoresDecoded0?.append(integer0) + } + } + } + agentCpuCores = agentCpuCoresDecoded0 let componentVersionsContainer = try containerValues.decodeIfPresent([GroundStationClientTypes.ComponentVersion?].self, forKey: .componentVersions) var componentVersionsDecoded0:[GroundStationClientTypes.ComponentVersion]? = nil if let componentVersionsContainer = componentVersionsContainer { @@ -72,6 +90,8 @@ extension GroundStationClientTypes.AgentDetails: Swift.Codable { extension GroundStationClientTypes { /// Detailed information about the agent. public struct AgentDetails: Swift.Equatable { + /// List of CPU cores reserved for the agent. + public var agentCpuCores: [Swift.Int]? /// Current agent version. /// This member is required. public var agentVersion: Swift.String? @@ -84,11 +104,11 @@ extension GroundStationClientTypes { /// Type of EC2 instance agent is running on. /// This member is required. public var instanceType: Swift.String? - /// Number of Cpu cores reserved for agent. - /// This member is required. + /// This field should not be used. Use agentCpuCores instead. List of CPU cores reserved for processes other than the agent running on the EC2 instance. public var reservedCpuCores: [Swift.Int]? public init ( + agentCpuCores: [Swift.Int]? = nil, agentVersion: Swift.String? = nil, componentVersions: [GroundStationClientTypes.ComponentVersion]? = nil, instanceId: Swift.String? = nil, @@ -96,6 +116,7 @@ extension GroundStationClientTypes { reservedCpuCores: [Swift.Int]? = nil ) { + self.agentCpuCores = agentCpuCores self.agentVersion = agentVersion self.componentVersions = componentVersions self.instanceId = instanceId @@ -665,6 +686,85 @@ extension CancelContactOutputResponseBody: Swift.Decodable { } } +extension GroundStationClientTypes { + public enum CapabilityHealth: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case healthy + case unhealthy + case sdkUnknown(Swift.String) + + public static var allCases: [CapabilityHealth] { + return [ + .healthy, + .unhealthy, + .sdkUnknown("") + ] + } + 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 .healthy: return "HEALTHY" + case .unhealthy: return "UNHEALTHY" + case let .sdkUnknown(s): return s + } + } + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = CapabilityHealth(rawValue: rawValue) ?? CapabilityHealth.sdkUnknown(rawValue) + } + } +} + +extension GroundStationClientTypes { + public enum CapabilityHealthReason: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case dataplaneFailure + case healthy + case initializingDataplane + case invalidIpOwnership + case notAuthorizedToCreateSlr + case noRegisteredAgent + case unverifiedIpOwnership + case sdkUnknown(Swift.String) + + public static var allCases: [CapabilityHealthReason] { + return [ + .dataplaneFailure, + .healthy, + .initializingDataplane, + .invalidIpOwnership, + .notAuthorizedToCreateSlr, + .noRegisteredAgent, + .unverifiedIpOwnership, + .sdkUnknown("") + ] + } + 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 .dataplaneFailure: return "DATAPLANE_FAILURE" + case .healthy: return "HEALTHY" + case .initializingDataplane: return "INITIALIZING_DATAPLANE" + case .invalidIpOwnership: return "INVALID_IP_OWNERSHIP" + case .notAuthorizedToCreateSlr: return "NOT_AUTHORIZED_TO_CREATE_SLR" + case .noRegisteredAgent: return "NO_REGISTERED_AGENT" + case .unverifiedIpOwnership: return "UNVERIFIED_IP_OWNERSHIP" + case let .sdkUnknown(s): return s + } + } + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = CapabilityHealthReason(rawValue: rawValue) ?? CapabilityHealthReason.sdkUnknown(rawValue) + } + } +} + extension GroundStationClientTypes.ComponentStatusData: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case bytesReceived @@ -688,7 +788,7 @@ extension GroundStationClientTypes.ComponentStatusData: Swift.Codable { try encodeContainer.encode(capabilityArn, forKey: .capabilityArn) } if let componentType = self.componentType { - try encodeContainer.encode(componentType.rawValue, forKey: .componentType) + try encodeContainer.encode(componentType, forKey: .componentType) } if let dataflowId = self.dataflowId { try encodeContainer.encode(dataflowId, forKey: .dataflowId) @@ -703,7 +803,7 @@ extension GroundStationClientTypes.ComponentStatusData: Swift.Codable { public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let componentTypeDecoded = try containerValues.decodeIfPresent(GroundStationClientTypes.ComponentType.self, forKey: .componentType) + let componentTypeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .componentType) componentType = componentTypeDecoded let capabilityArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .capabilityArn) capabilityArn = capabilityArnDecoded @@ -732,7 +832,7 @@ extension GroundStationClientTypes { public var capabilityArn: Swift.String? /// The Component type. /// This member is required. - public var componentType: GroundStationClientTypes.ComponentType? + public var componentType: Swift.String? /// Dataflow UUID associated with the component. /// This member is required. public var dataflowId: Swift.String? @@ -746,7 +846,7 @@ extension GroundStationClientTypes { bytesReceived: Swift.Int? = nil, bytesSent: Swift.Int? = nil, capabilityArn: Swift.String? = nil, - componentType: GroundStationClientTypes.ComponentType? = nil, + componentType: Swift.String? = nil, dataflowId: Swift.String? = nil, packetsDropped: Swift.Int? = nil, status: GroundStationClientTypes.AgentStatus? = nil @@ -764,41 +864,6 @@ extension GroundStationClientTypes { } -extension GroundStationClientTypes { - public enum ComponentType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case digitizer - case laminarFlow - case prism - case sdkUnknown(Swift.String) - - public static var allCases: [ComponentType] { - return [ - .digitizer, - .laminarFlow, - .prism, - .sdkUnknown("") - ] - } - 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 .digitizer: return "DIGITIZER" - case .laminarFlow: return "LAMINAR_FLOW" - case .prism: return "PRISM" - case let .sdkUnknown(s): return s - } - } - public init(from decoder: Swift.Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(RawValue.self) - self = ComponentType(rawValue: rawValue) ?? ComponentType.sdkUnknown(rawValue) - } - } -} - extension GroundStationClientTypes.ComponentVersion: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case componentType @@ -808,7 +873,7 @@ extension GroundStationClientTypes.ComponentVersion: Swift.Codable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) if let componentType = self.componentType { - try encodeContainer.encode(componentType.rawValue, forKey: .componentType) + try encodeContainer.encode(componentType, forKey: .componentType) } if let versions = versions { var versionsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .versions) @@ -820,7 +885,7 @@ extension GroundStationClientTypes.ComponentVersion: Swift.Codable { public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let componentTypeDecoded = try containerValues.decodeIfPresent(GroundStationClientTypes.ComponentType.self, forKey: .componentType) + let componentTypeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .componentType) componentType = componentTypeDecoded let versionsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .versions) var versionsDecoded0:[Swift.String]? = nil @@ -841,13 +906,13 @@ extension GroundStationClientTypes { public struct ComponentVersion: Swift.Equatable { /// Component type. /// This member is required. - public var componentType: GroundStationClientTypes.ComponentType? + public var componentType: Swift.String? /// List of versions. /// This member is required. public var versions: [Swift.String]? public init ( - componentType: GroundStationClientTypes.ComponentType? = nil, + componentType: Swift.String? = nil, versions: [Swift.String]? = nil ) { @@ -1617,9 +1682,9 @@ extension CreateDataflowEndpointGroupInput: ClientRuntime.URLPathProvider { /// public struct CreateDataflowEndpointGroupInput: Swift.Equatable { - /// Amount of time, in seconds, after a contact ends for the contact to remain in a POSTPASS state. A CloudWatch event is emitted when the contact enters and exits the POSTPASS state. + /// Amount of time, in seconds, after a contact ends that the Ground Station Dataflow Endpoint Group will be in a POSTPASS state. A Ground Station Dataflow Endpoint Group State Change event will be emitted when the Dataflow Endpoint Group enters and exits the POSTPASS state. public var contactPostPassDurationSeconds: Swift.Int? - /// Amount of time, in seconds, prior to contact start for the contact to remain in a PREPASS state. A CloudWatch event is emitted when the contact enters and exits the PREPASS state. + /// Amount of time, in seconds, before a contact starts that the Ground Station Dataflow Endpoint Group will be in a PREPASS state. A Ground Station Dataflow Endpoint Group State Change event will be emitted when the Dataflow Endpoint Group enters and exits the PREPASS state. public var contactPrePassDurationSeconds: Swift.Int? /// Endpoint details of each endpoint in the dataflow endpoint group. /// This member is required. @@ -3756,6 +3821,8 @@ extension GroundStationClientTypes.EndpointDetails: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case awsGroundStationAgentEndpoint case endpoint + case healthReasons + case healthStatus case securityDetails } @@ -3767,6 +3834,15 @@ extension GroundStationClientTypes.EndpointDetails: Swift.Codable { if let endpoint = self.endpoint { try encodeContainer.encode(endpoint, forKey: .endpoint) } + if let healthReasons = healthReasons { + var healthReasonsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .healthReasons) + for capabilityhealthreason0 in healthReasons { + try healthReasonsContainer.encode(capabilityhealthreason0.rawValue) + } + } + if let healthStatus = self.healthStatus { + try encodeContainer.encode(healthStatus.rawValue, forKey: .healthStatus) + } if let securityDetails = self.securityDetails { try encodeContainer.encode(securityDetails, forKey: .securityDetails) } @@ -3780,6 +3856,19 @@ extension GroundStationClientTypes.EndpointDetails: Swift.Codable { endpoint = endpointDecoded let awsGroundStationAgentEndpointDecoded = try containerValues.decodeIfPresent(GroundStationClientTypes.AwsGroundStationAgentEndpoint.self, forKey: .awsGroundStationAgentEndpoint) awsGroundStationAgentEndpoint = awsGroundStationAgentEndpointDecoded + let healthStatusDecoded = try containerValues.decodeIfPresent(GroundStationClientTypes.CapabilityHealth.self, forKey: .healthStatus) + healthStatus = healthStatusDecoded + let healthReasonsContainer = try containerValues.decodeIfPresent([GroundStationClientTypes.CapabilityHealthReason?].self, forKey: .healthReasons) + var healthReasonsDecoded0:[GroundStationClientTypes.CapabilityHealthReason]? = nil + if let healthReasonsContainer = healthReasonsContainer { + healthReasonsDecoded0 = [GroundStationClientTypes.CapabilityHealthReason]() + for string0 in healthReasonsContainer { + if let string0 = string0 { + healthReasonsDecoded0?.append(string0) + } + } + } + healthReasons = healthReasonsDecoded0 } } @@ -3790,17 +3879,25 @@ extension GroundStationClientTypes { public var awsGroundStationAgentEndpoint: GroundStationClientTypes.AwsGroundStationAgentEndpoint? /// A dataflow endpoint. public var endpoint: GroundStationClientTypes.DataflowEndpoint? + /// Health reasons for a dataflow endpoint. This field is ignored when calling CreateDataflowEndpointGroup. + public var healthReasons: [GroundStationClientTypes.CapabilityHealthReason]? + /// A dataflow endpoint health status. This field is ignored when calling CreateDataflowEndpointGroup. + public var healthStatus: GroundStationClientTypes.CapabilityHealth? /// Endpoint security details including a list of subnets, a list of security groups and a role to connect streams to instances. public var securityDetails: GroundStationClientTypes.SecurityDetails? public init ( awsGroundStationAgentEndpoint: GroundStationClientTypes.AwsGroundStationAgentEndpoint? = nil, endpoint: GroundStationClientTypes.DataflowEndpoint? = nil, + healthReasons: [GroundStationClientTypes.CapabilityHealthReason]? = nil, + healthStatus: GroundStationClientTypes.CapabilityHealth? = nil, securityDetails: GroundStationClientTypes.SecurityDetails? = nil ) { self.awsGroundStationAgentEndpoint = awsGroundStationAgentEndpoint self.endpoint = endpoint + self.healthReasons = healthReasons + self.healthStatus = healthStatus self.securityDetails = securityDetails } } @@ -4767,9 +4864,9 @@ extension GetDataflowEndpointGroupOutputResponse: ClientRuntime.HttpResponseBind /// public struct GetDataflowEndpointGroupOutputResponse: Swift.Equatable { - /// Amount of time, in seconds, after a contact ends for the contact to remain in a POSTPASS state. A CloudWatch event is emitted when the contact enters and exits the POSTPASS state. + /// Amount of time, in seconds, after a contact ends that the Ground Station Dataflow Endpoint Group will be in a POSTPASS state. A Ground Station Dataflow Endpoint Group State Change event will be emitted when the Dataflow Endpoint Group enters and exits the POSTPASS state. public var contactPostPassDurationSeconds: Swift.Int? - /// Amount of time, in seconds, prior to contact start for the contact to remain in a PREPASS state. A CloudWatch event is emitted when the contact enters and exits the PREPASS state. + /// Amount of time, in seconds, before a contact starts that the Ground Station Dataflow Endpoint Group will be in a PREPASS state. A Ground Station Dataflow Endpoint Group State Change event will be emitted when the Dataflow Endpoint Group enters and exits the PREPASS state. public var contactPrePassDurationSeconds: Swift.Int? /// ARN of a dataflow endpoint group. public var dataflowEndpointGroupArn: Swift.String? @@ -7124,7 +7221,7 @@ public struct RegisterAgentInput: Swift.Equatable { /// Detailed information about the agent being registered. /// This member is required. public var agentDetails: GroundStationClientTypes.AgentDetails? - /// Data for associating and agent with the capabilities it is managing. + /// Data for associating an agent with the capabilities it is managing. /// This member is required. public var discoveryData: GroundStationClientTypes.DiscoveryData? diff --git a/Sources/Services/AWSHealth/EndpointResolver.swift b/Sources/Services/AWSHealth/EndpointResolver.swift index 89cc91863b2..8ad8e3e5054 100644 --- a/Sources/Services/AWSHealth/EndpointResolver.swift +++ b/Sources/Services/AWSHealth/EndpointResolver.swift @@ -35,7 +35,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://global.health.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"health\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-cn\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://global.health.amazonaws.com.cn\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"cn-northwest-1\",\"signingName\":\"health\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://health-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://health-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://health.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://health.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" + private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://global.health.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"health\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-cn\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://global.health.amazonaws.com.cn\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"health\",\"signingRegion\":\"cn-northwest-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://health-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://health-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://health.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://health.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSIAM/EndpointResolver.swift b/Sources/Services/AWSIAM/EndpointResolver.swift index 0c4c120b3f0..a0b554e4c3e 100644 --- a/Sources/Services/AWSIAM/EndpointResolver.swift +++ b/Sources/Services/AWSIAM/EndpointResolver.swift @@ -35,7 +35,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://iam.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"iam\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://iam-fips.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"iam\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-cn\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://iam.cn-north-1.amazonaws.com.cn\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"cn-north-1\",\"signingName\":\"iam\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-us-gov\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://iam.us-gov.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-gov-west-1\",\"signingName\":\"iam\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-us-gov\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://iam.us-gov.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-gov-west-1\",\"signingName\":\"iam\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-iso\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://iam.us-iso-east-1.c2s.ic.gov\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-iso-east-1\",\"signingName\":\"iam\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-iso-b\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://iam.us-isob-east-1.sc2s.sgov.gov\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-isob-east-1\",\"signingName\":\"iam\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://iam-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://iam-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://iam.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://iam.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" + private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://iam.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"iam\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://iam-fips.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"iam\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-cn\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://iam.cn-north-1.amazonaws.com.cn\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"iam\",\"signingRegion\":\"cn-north-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-us-gov\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://iam.us-gov.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"iam\",\"signingRegion\":\"us-gov-west-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-us-gov\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://iam.us-gov.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"iam\",\"signingRegion\":\"us-gov-west-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-iso\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://iam.us-iso-east-1.c2s.ic.gov\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"iam\",\"signingRegion\":\"us-iso-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-iso-b\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://iam.us-isob-east-1.sc2s.sgov.gov\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"iam\",\"signingRegion\":\"us-isob-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://iam-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://iam-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://iam.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://iam.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSInternetMonitor/models/Models.swift b/Sources/Services/AWSInternetMonitor/models/Models.swift index 7a3e693069b..fa1d0697090 100644 --- a/Sources/Services/AWSInternetMonitor/models/Models.swift +++ b/Sources/Services/AWSInternetMonitor/models/Models.swift @@ -221,6 +221,7 @@ extension CreateMonitorInput: Swift.Encodable { case monitorName = "MonitorName" case resources = "Resources" case tags = "Tags" + case trafficPercentageToMonitor = "TrafficPercentageToMonitor" } public func encode(to encoder: Swift.Encoder) throws { @@ -249,6 +250,9 @@ extension CreateMonitorInput: Swift.Encodable { try tagsContainer.encode(tagMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) } } + if trafficPercentageToMonitor != 0 { + try encodeContainer.encode(trafficPercentageToMonitor, forKey: .trafficPercentageToMonitor) + } } } @@ -261,10 +265,9 @@ extension CreateMonitorInput: ClientRuntime.URLPathProvider { public struct CreateMonitorInput: Swift.Equatable { /// A unique, case-sensitive string of up to 64 ASCII characters that you specify to make an idempotent API request. Don't reuse the same client token for other API requests. public var clientToken: Swift.String? - /// Publish internet measurements for Internet Monitor to another location, such as an Amazon S3 bucket. The measurements are also published to Amazon CloudWatch Logs. + /// Publish internet measurements for Internet Monitor to an Amazon S3 bucket in addition to CloudWatch Logs. public var internetMeasurementsLogDelivery: InternetMonitorClientTypes.InternetMeasurementsLogDelivery? /// The maximum number of city-networks to monitor for your resources. A city-network is the location (city) where clients access your application resources from and the network or ASN, such as an internet service provider (ISP), that clients access the resources through. This limit helps control billing costs. To learn more, see [Choosing a city-network maximum value ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/IMCityNetworksMaximum.html) in the Amazon CloudWatch Internet Monitor section of the CloudWatch User Guide. - /// This member is required. public var maxCityNetworksToMonitor: Swift.Int /// The name of the monitor. /// This member is required. @@ -273,6 +276,8 @@ public struct CreateMonitorInput: Swift.Equatable { public var resources: [Swift.String]? /// The tags for a monitor. You can add a maximum of 50 tags in Internet Monitor. public var tags: [Swift.String:Swift.String]? + /// The percentage of the internet-facing traffic for your application that you want to monitor with this monitor. + public var trafficPercentageToMonitor: Swift.Int public init ( clientToken: Swift.String? = nil, @@ -280,7 +285,8 @@ public struct CreateMonitorInput: Swift.Equatable { maxCityNetworksToMonitor: Swift.Int = 0, monitorName: Swift.String? = nil, resources: [Swift.String]? = nil, - tags: [Swift.String:Swift.String]? = nil + tags: [Swift.String:Swift.String]? = nil, + trafficPercentageToMonitor: Swift.Int = 0 ) { self.clientToken = clientToken @@ -289,6 +295,7 @@ public struct CreateMonitorInput: Swift.Equatable { self.monitorName = monitorName self.resources = resources self.tags = tags + self.trafficPercentageToMonitor = trafficPercentageToMonitor } } @@ -299,6 +306,7 @@ struct CreateMonitorInputBody: Swift.Equatable { let tags: [Swift.String:Swift.String]? let maxCityNetworksToMonitor: Swift.Int let internetMeasurementsLogDelivery: InternetMonitorClientTypes.InternetMeasurementsLogDelivery? + let trafficPercentageToMonitor: Swift.Int } extension CreateMonitorInputBody: Swift.Decodable { @@ -309,6 +317,7 @@ extension CreateMonitorInputBody: Swift.Decodable { case monitorName = "MonitorName" case resources = "Resources" case tags = "Tags" + case trafficPercentageToMonitor = "TrafficPercentageToMonitor" } public init (from decoder: Swift.Decoder) throws { @@ -343,6 +352,8 @@ extension CreateMonitorInputBody: Swift.Decodable { maxCityNetworksToMonitor = maxCityNetworksToMonitorDecoded let internetMeasurementsLogDeliveryDecoded = try containerValues.decodeIfPresent(InternetMonitorClientTypes.InternetMeasurementsLogDelivery.self, forKey: .internetMeasurementsLogDelivery) internetMeasurementsLogDelivery = internetMeasurementsLogDeliveryDecoded + let trafficPercentageToMonitorDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .trafficPercentageToMonitor) ?? 0 + trafficPercentageToMonitor = trafficPercentageToMonitorDecoded } } @@ -790,6 +801,7 @@ extension GetMonitorOutputResponse: ClientRuntime.HttpResponseBinding { self.resources = output.resources self.status = output.status self.tags = output.tags + self.trafficPercentageToMonitor = output.trafficPercentageToMonitor } else { self.createdAt = nil self.internetMeasurementsLogDelivery = nil @@ -802,6 +814,7 @@ extension GetMonitorOutputResponse: ClientRuntime.HttpResponseBinding { self.resources = nil self.status = nil self.tags = nil + self.trafficPercentageToMonitor = 0 } } } @@ -813,7 +826,6 @@ public struct GetMonitorOutputResponse: Swift.Equatable { /// Publish internet measurements for Internet Monitor to another location, such as an Amazon S3 bucket. The measurements are also published to Amazon CloudWatch Logs. public var internetMeasurementsLogDelivery: InternetMonitorClientTypes.InternetMeasurementsLogDelivery? /// The maximum number of city-networks to monitor for your resources. A city-network is the location (city) where clients access your application resources from and the network or ASN, such as an internet service provider (ISP), that clients access the resources through. This limit helps control billing costs. To learn more, see [Choosing a city-network maximum value ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/IMCityNetworksMaximum.html) in the Amazon CloudWatch Internet Monitor section of the CloudWatch User Guide. - /// This member is required. public var maxCityNetworksToMonitor: Swift.Int /// The last time that the monitor was modified. /// This member is required. @@ -836,6 +848,8 @@ public struct GetMonitorOutputResponse: Swift.Equatable { public var status: InternetMonitorClientTypes.MonitorConfigState? /// The tags that have been added to monitor. public var tags: [Swift.String:Swift.String]? + /// The percentage of the internet-facing traffic for your application that you want to monitor with this monitor. + public var trafficPercentageToMonitor: Swift.Int public init ( createdAt: ClientRuntime.Date? = nil, @@ -848,7 +862,8 @@ public struct GetMonitorOutputResponse: Swift.Equatable { processingStatusInfo: Swift.String? = nil, resources: [Swift.String]? = nil, status: InternetMonitorClientTypes.MonitorConfigState? = nil, - tags: [Swift.String:Swift.String]? = nil + tags: [Swift.String:Swift.String]? = nil, + trafficPercentageToMonitor: Swift.Int = 0 ) { self.createdAt = createdAt @@ -862,6 +877,7 @@ public struct GetMonitorOutputResponse: Swift.Equatable { self.resources = resources self.status = status self.tags = tags + self.trafficPercentageToMonitor = trafficPercentageToMonitor } } @@ -877,6 +893,7 @@ struct GetMonitorOutputResponseBody: Swift.Equatable { let tags: [Swift.String:Swift.String]? let maxCityNetworksToMonitor: Swift.Int let internetMeasurementsLogDelivery: InternetMonitorClientTypes.InternetMeasurementsLogDelivery? + let trafficPercentageToMonitor: Swift.Int } extension GetMonitorOutputResponseBody: Swift.Decodable { @@ -892,6 +909,7 @@ extension GetMonitorOutputResponseBody: Swift.Decodable { case resources = "Resources" case status = "Status" case tags = "Tags" + case trafficPercentageToMonitor = "TrafficPercentageToMonitor" } public init (from decoder: Swift.Decoder) throws { @@ -936,6 +954,8 @@ extension GetMonitorOutputResponseBody: Swift.Decodable { maxCityNetworksToMonitor = maxCityNetworksToMonitorDecoded let internetMeasurementsLogDeliveryDecoded = try containerValues.decodeIfPresent(InternetMonitorClientTypes.InternetMeasurementsLogDelivery.self, forKey: .internetMeasurementsLogDelivery) internetMeasurementsLogDelivery = internetMeasurementsLogDeliveryDecoded + let trafficPercentageToMonitorDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .trafficPercentageToMonitor) ?? 0 + trafficPercentageToMonitor = trafficPercentageToMonitorDecoded } } @@ -1485,7 +1505,7 @@ extension InternetMonitorClientTypes.InternetMeasurementsLogDelivery: Swift.Coda } extension InternetMonitorClientTypes { - /// Configuration information for other locations that you choose to publish Amazon CloudWatch Internet Monitor internet measurements to, such as Amazon S3. The measurements are also published to Amazon CloudWatch Logs. + /// Publish internet measurements to an Amazon S3 bucket in addition to CloudWatch Logs. public struct InternetMeasurementsLogDelivery: Swift.Equatable { /// The configuration information for publishing Internet Monitor internet measurements to Amazon S3. The configuration includes the bucket name and (optionally) prefix for the S3 bucket to store the measurements, and the delivery status. The delivery status is ENABLED or DISABLED, depending on whether you choose to deliver internet measurements to S3 logs. public var s3Config: InternetMonitorClientTypes.S3Config? @@ -2912,6 +2932,7 @@ extension UpdateMonitorInput: Swift.Encodable { case resourcesToAdd = "ResourcesToAdd" case resourcesToRemove = "ResourcesToRemove" case status = "Status" + case trafficPercentageToMonitor = "TrafficPercentageToMonitor" } public func encode(to encoder: Swift.Encoder) throws { @@ -2940,6 +2961,9 @@ extension UpdateMonitorInput: Swift.Encodable { if let status = self.status { try encodeContainer.encode(status.rawValue, forKey: .status) } + if trafficPercentageToMonitor != 0 { + try encodeContainer.encode(trafficPercentageToMonitor, forKey: .trafficPercentageToMonitor) + } } } @@ -2968,6 +2992,8 @@ public struct UpdateMonitorInput: Swift.Equatable { public var resourcesToRemove: [Swift.String]? /// The status for a monitor. The accepted values for Status with the UpdateMonitor API call are the following: ACTIVE and INACTIVE. The following values are not accepted: PENDING, and ERROR. public var status: InternetMonitorClientTypes.MonitorConfigState? + /// The percentage of the internet-facing traffic for your application that you want to monitor with this monitor. + public var trafficPercentageToMonitor: Swift.Int public init ( clientToken: Swift.String? = nil, @@ -2976,7 +3002,8 @@ public struct UpdateMonitorInput: Swift.Equatable { monitorName: Swift.String? = nil, resourcesToAdd: [Swift.String]? = nil, resourcesToRemove: [Swift.String]? = nil, - status: InternetMonitorClientTypes.MonitorConfigState? = nil + status: InternetMonitorClientTypes.MonitorConfigState? = nil, + trafficPercentageToMonitor: Swift.Int = 0 ) { self.clientToken = clientToken @@ -2986,6 +3013,7 @@ public struct UpdateMonitorInput: Swift.Equatable { self.resourcesToAdd = resourcesToAdd self.resourcesToRemove = resourcesToRemove self.status = status + self.trafficPercentageToMonitor = trafficPercentageToMonitor } } @@ -2996,6 +3024,7 @@ struct UpdateMonitorInputBody: Swift.Equatable { let clientToken: Swift.String? let maxCityNetworksToMonitor: Swift.Int let internetMeasurementsLogDelivery: InternetMonitorClientTypes.InternetMeasurementsLogDelivery? + let trafficPercentageToMonitor: Swift.Int } extension UpdateMonitorInputBody: Swift.Decodable { @@ -3006,6 +3035,7 @@ extension UpdateMonitorInputBody: Swift.Decodable { case resourcesToAdd = "ResourcesToAdd" case resourcesToRemove = "ResourcesToRemove" case status = "Status" + case trafficPercentageToMonitor = "TrafficPercentageToMonitor" } public init (from decoder: Swift.Decoder) throws { @@ -3040,6 +3070,8 @@ extension UpdateMonitorInputBody: Swift.Decodable { maxCityNetworksToMonitor = maxCityNetworksToMonitorDecoded let internetMeasurementsLogDeliveryDecoded = try containerValues.decodeIfPresent(InternetMonitorClientTypes.InternetMeasurementsLogDelivery.self, forKey: .internetMeasurementsLogDelivery) internetMeasurementsLogDelivery = internetMeasurementsLogDeliveryDecoded + let trafficPercentageToMonitorDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .trafficPercentageToMonitor) ?? 0 + trafficPercentageToMonitor = trafficPercentageToMonitorDecoded } } diff --git a/Sources/Services/AWSIoTDataPlane/IoTDataPlaneClient.swift b/Sources/Services/AWSIoTDataPlane/IoTDataPlaneClient.swift index 8b7e2676543..99d07b1ba19 100644 --- a/Sources/Services/AWSIoTDataPlane/IoTDataPlaneClient.swift +++ b/Sources/Services/AWSIoTDataPlane/IoTDataPlaneClient.swift @@ -163,7 +163,7 @@ extension IoTDataPlaneClient: IoTDataPlaneClientProtocol { return result } - /// Gets the details of a single retained message for the specified topic. This action returns the message payload of the retained message, which can incur messaging costs. To list only the topic names of the retained messages, call [ListRetainedMessages]. Requires permission to access the [GetRetainedMessage](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleethubfordevicemanagement.html#awsiotfleethubfordevicemanagement-actions-as-permissions) action. For more information about messaging costs, see [Amazon Web Services IoT Core pricing - Messaging](http://aws.amazon.com/iot-core/pricing/#Messaging). + /// Gets the details of a single retained message for the specified topic. This action returns the message payload of the retained message, which can incur messaging costs. To list only the topic names of the retained messages, call [ListRetainedMessages](https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_ListRetainedMessages.html). Requires permission to access the [GetRetainedMessage](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleethubfordevicemanagement.html#awsiotfleethubfordevicemanagement-actions-as-permissions) action. For more information about messaging costs, see [Amazon Web Services IoT Core pricing - Messaging](http://aws.amazon.com/iot-core/pricing/#Messaging). public func getRetainedMessage(input: GetRetainedMessageInput) async throws -> GetRetainedMessageOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -261,7 +261,7 @@ extension IoTDataPlaneClient: IoTDataPlaneClientProtocol { return result } - /// Lists summary information about the retained messages stored for the account. This action returns only the topic names of the retained messages. It doesn't return any message payloads. Although this action doesn't return a message payload, it can still incur messaging costs. To get the message payload of a retained message, call [GetRetainedMessage](https://docs.aws.amazon.com/iot/latest/developerguide/API_iotdata_GetRetainedMessage.html) with the topic name of the retained message. Requires permission to access the [ListRetainedMessages](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleethubfordevicemanagement.html#awsiotfleethubfordevicemanagement-actions-as-permissions) action. For more information about messaging costs, see [Amazon Web Services IoT Core pricing - Messaging](http://aws.amazon.com/iot-core/pricing/#Messaging). + /// Lists summary information about the retained messages stored for the account. This action returns only the topic names of the retained messages. It doesn't return any message payloads. Although this action doesn't return a message payload, it can still incur messaging costs. To get the message payload of a retained message, call [GetRetainedMessage](https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_GetRetainedMessage.html) with the topic name of the retained message. Requires permission to access the [ListRetainedMessages](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleethubfordevicemanagement.html#awsiotfleethubfordevicemanagement-actions-as-permissions) action. For more information about messaging costs, see [Amazon Web Services IoT Core pricing - Messaging](http://aws.amazon.com/iot-core/pricing/#Messaging). public func listRetainedMessages(input: ListRetainedMessagesInput) async throws -> ListRetainedMessagesOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSIoTDataPlane/IoTDataPlaneClientProtocol.swift b/Sources/Services/AWSIoTDataPlane/IoTDataPlaneClientProtocol.swift index b4bf5d72062..d842f81f553 100644 --- a/Sources/Services/AWSIoTDataPlane/IoTDataPlaneClientProtocol.swift +++ b/Sources/Services/AWSIoTDataPlane/IoTDataPlaneClientProtocol.swift @@ -7,13 +7,13 @@ import ClientRuntime public protocol IoTDataPlaneClientProtocol { /// Deletes the shadow for the specified thing. Requires permission to access the [DeleteThingShadow](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions) action. For more information, see [DeleteThingShadow](http://docs.aws.amazon.com/iot/latest/developerguide/API_DeleteThingShadow.html) in the IoT Developer Guide. func deleteThingShadow(input: DeleteThingShadowInput) async throws -> DeleteThingShadowOutputResponse - /// Gets the details of a single retained message for the specified topic. This action returns the message payload of the retained message, which can incur messaging costs. To list only the topic names of the retained messages, call [ListRetainedMessages]. Requires permission to access the [GetRetainedMessage](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleethubfordevicemanagement.html#awsiotfleethubfordevicemanagement-actions-as-permissions) action. For more information about messaging costs, see [Amazon Web Services IoT Core pricing - Messaging](http://aws.amazon.com/iot-core/pricing/#Messaging). + /// Gets the details of a single retained message for the specified topic. This action returns the message payload of the retained message, which can incur messaging costs. To list only the topic names of the retained messages, call [ListRetainedMessages](https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_ListRetainedMessages.html). Requires permission to access the [GetRetainedMessage](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleethubfordevicemanagement.html#awsiotfleethubfordevicemanagement-actions-as-permissions) action. For more information about messaging costs, see [Amazon Web Services IoT Core pricing - Messaging](http://aws.amazon.com/iot-core/pricing/#Messaging). func getRetainedMessage(input: GetRetainedMessageInput) async throws -> GetRetainedMessageOutputResponse /// Gets the shadow for the specified thing. Requires permission to access the [GetThingShadow](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions) action. For more information, see [GetThingShadow](http://docs.aws.amazon.com/iot/latest/developerguide/API_GetThingShadow.html) in the IoT Developer Guide. func getThingShadow(input: GetThingShadowInput) async throws -> GetThingShadowOutputResponse /// Lists the shadows for the specified thing. Requires permission to access the [ListNamedShadowsForThing](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions) action. func listNamedShadowsForThing(input: ListNamedShadowsForThingInput) async throws -> ListNamedShadowsForThingOutputResponse - /// Lists summary information about the retained messages stored for the account. This action returns only the topic names of the retained messages. It doesn't return any message payloads. Although this action doesn't return a message payload, it can still incur messaging costs. To get the message payload of a retained message, call [GetRetainedMessage](https://docs.aws.amazon.com/iot/latest/developerguide/API_iotdata_GetRetainedMessage.html) with the topic name of the retained message. Requires permission to access the [ListRetainedMessages](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleethubfordevicemanagement.html#awsiotfleethubfordevicemanagement-actions-as-permissions) action. For more information about messaging costs, see [Amazon Web Services IoT Core pricing - Messaging](http://aws.amazon.com/iot-core/pricing/#Messaging). + /// Lists summary information about the retained messages stored for the account. This action returns only the topic names of the retained messages. It doesn't return any message payloads. Although this action doesn't return a message payload, it can still incur messaging costs. To get the message payload of a retained message, call [GetRetainedMessage](https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_GetRetainedMessage.html) with the topic name of the retained message. Requires permission to access the [ListRetainedMessages](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleethubfordevicemanagement.html#awsiotfleethubfordevicemanagement-actions-as-permissions) action. For more information about messaging costs, see [Amazon Web Services IoT Core pricing - Messaging](http://aws.amazon.com/iot-core/pricing/#Messaging). func listRetainedMessages(input: ListRetainedMessagesInput) async throws -> ListRetainedMessagesOutputResponse /// Publishes an MQTT message. Requires permission to access the [Publish](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions) action. For more information about MQTT messages, see [MQTT Protocol](http://docs.aws.amazon.com/iot/latest/developerguide/mqtt.html) in the IoT Developer Guide. For more information about messaging costs, see [Amazon Web Services IoT Core pricing - Messaging](http://aws.amazon.com/iot-core/pricing/#Messaging). func publish(input: PublishInput) async throws -> PublishOutputResponse diff --git a/Sources/Services/AWSIoTDataPlane/models/Models.swift b/Sources/Services/AWSIoTDataPlane/models/Models.swift index 5e7a9e9f8bd..9165b83d4bd 100644 --- a/Sources/Services/AWSIoTDataPlane/models/Models.swift +++ b/Sources/Services/AWSIoTDataPlane/models/Models.swift @@ -256,11 +256,13 @@ extension GetRetainedMessageOutputResponse: ClientRuntime.HttpResponseBinding { self.payload = output.payload self.qos = output.qos self.topic = output.topic + self.userProperties = output.userProperties } else { self.lastModifiedTime = 0 self.payload = nil self.qos = 0 self.topic = nil + self.userProperties = nil } } } @@ -275,18 +277,22 @@ public struct GetRetainedMessageOutputResponse: Swift.Equatable { public var qos: Swift.Int /// The topic name to which the retained message was published. public var topic: Swift.String? + /// A base64-encoded JSON string that includes an array of JSON objects, or null if the retained message doesn't include any user properties. The following example userProperties parameter is a JSON string that represents two user properties. Note that it will be base64-encoded: [{"deviceName": "alpha"}, {"deviceCnt": "45"}] + public var userProperties: ClientRuntime.Data? public init ( lastModifiedTime: Swift.Int = 0, payload: ClientRuntime.Data? = nil, qos: Swift.Int = 0, - topic: Swift.String? = nil + topic: Swift.String? = nil, + userProperties: ClientRuntime.Data? = nil ) { self.lastModifiedTime = lastModifiedTime self.payload = payload self.qos = qos self.topic = topic + self.userProperties = userProperties } } @@ -295,6 +301,7 @@ struct GetRetainedMessageOutputResponseBody: Swift.Equatable { let payload: ClientRuntime.Data? let qos: Swift.Int let lastModifiedTime: Swift.Int + let userProperties: ClientRuntime.Data? } extension GetRetainedMessageOutputResponseBody: Swift.Decodable { @@ -303,6 +310,7 @@ extension GetRetainedMessageOutputResponseBody: Swift.Decodable { case payload case qos case topic + case userProperties } public init (from decoder: Swift.Decoder) throws { @@ -315,6 +323,8 @@ extension GetRetainedMessageOutputResponseBody: Swift.Decodable { qos = qosDecoded let lastModifiedTimeDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .lastModifiedTime) ?? 0 lastModifiedTime = lastModifiedTimeDecoded + let userPropertiesDecoded = try containerValues.decodeIfPresent(ClientRuntime.Data.self, forKey: .userProperties) + userProperties = userPropertiesDecoded } } diff --git a/Sources/Services/AWSIoTWireless/models/Models.swift b/Sources/Services/AWSIoTWireless/models/Models.swift index d5e10361125..d88f11b420d 100644 --- a/Sources/Services/AWSIoTWireless/models/Models.swift +++ b/Sources/Services/AWSIoTWireless/models/Models.swift @@ -14108,6 +14108,7 @@ extension IoTWirelessClientTypes.LoRaWANGateway: Swift.Codable { case beaconing = "Beaconing" case gatewayEui = "GatewayEui" case joinEuiFilters = "JoinEuiFilters" + case maxEirp = "MaxEirp" case netIdFilters = "NetIdFilters" case rfRegion = "RfRegion" case subBands = "SubBands" @@ -14130,6 +14131,9 @@ extension IoTWirelessClientTypes.LoRaWANGateway: Swift.Codable { } } } + if let maxEirp = self.maxEirp { + try encodeContainer.encode(maxEirp, forKey: .maxEirp) + } if let netIdFilters = netIdFilters { var netIdFiltersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .netIdFilters) for netid0 in netIdFilters { @@ -14197,6 +14201,8 @@ extension IoTWirelessClientTypes.LoRaWANGateway: Swift.Codable { subBands = subBandsDecoded0 let beaconingDecoded = try containerValues.decodeIfPresent(IoTWirelessClientTypes.Beaconing.self, forKey: .beaconing) beaconing = beaconingDecoded + let maxEirpDecoded = try containerValues.decodeIfPresent(Swift.Float.self, forKey: .maxEirp) + maxEirp = maxEirpDecoded } } @@ -14209,6 +14215,8 @@ extension IoTWirelessClientTypes { public var gatewayEui: Swift.String? /// A list of JoinEuiRange used by LoRa gateways to filter LoRa frames. public var joinEuiFilters: [[Swift.String]]? + /// The MaxEIRP value. + public var maxEirp: Swift.Float? /// A list of NetId values that are used by LoRa gateways to filter the uplink frames. public var netIdFilters: [Swift.String]? /// The frequency band (RFRegion) value. @@ -14220,6 +14228,7 @@ extension IoTWirelessClientTypes { beaconing: IoTWirelessClientTypes.Beaconing? = nil, gatewayEui: Swift.String? = nil, joinEuiFilters: [[Swift.String]]? = nil, + maxEirp: Swift.Float? = nil, netIdFilters: [Swift.String]? = nil, rfRegion: Swift.String? = nil, subBands: [Swift.Int]? = nil @@ -14228,6 +14237,7 @@ extension IoTWirelessClientTypes { self.beaconing = beaconing self.gatewayEui = gatewayEui self.joinEuiFilters = joinEuiFilters + self.maxEirp = maxEirp self.netIdFilters = netIdFilters self.rfRegion = rfRegion self.subBands = subBands @@ -14850,6 +14860,7 @@ extension IoTWirelessClientTypes.LoRaWANMulticastSession: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case dlDr = "DlDr" case dlFreq = "DlFreq" + case pingSlotPeriod = "PingSlotPeriod" case sessionStartTime = "SessionStartTime" case sessionTimeout = "SessionTimeout" } @@ -14862,6 +14873,9 @@ extension IoTWirelessClientTypes.LoRaWANMulticastSession: Swift.Codable { if let dlFreq = self.dlFreq { try encodeContainer.encode(dlFreq, forKey: .dlFreq) } + if let pingSlotPeriod = self.pingSlotPeriod { + try encodeContainer.encode(pingSlotPeriod, forKey: .pingSlotPeriod) + } if let sessionStartTime = self.sessionStartTime { try encodeContainer.encodeTimestamp(sessionStartTime, format: .dateTime, forKey: .sessionStartTime) } @@ -14880,6 +14894,8 @@ extension IoTWirelessClientTypes.LoRaWANMulticastSession: Swift.Codable { sessionStartTime = sessionStartTimeDecoded let sessionTimeoutDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .sessionTimeout) sessionTimeout = sessionTimeoutDecoded + let pingSlotPeriodDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .pingSlotPeriod) + pingSlotPeriod = pingSlotPeriodDecoded } } @@ -14890,6 +14906,8 @@ extension IoTWirelessClientTypes { public var dlDr: Swift.Int? /// Downlink frequency. public var dlFreq: Swift.Int? + /// The PingSlotPeriod value. + public var pingSlotPeriod: Swift.Int? /// Timestamp of when the multicast group session is to start. public var sessionStartTime: ClientRuntime.Date? /// How long before a multicast group session is to timeout. @@ -14898,12 +14916,14 @@ extension IoTWirelessClientTypes { public init ( dlDr: Swift.Int? = nil, dlFreq: Swift.Int? = nil, + pingSlotPeriod: Swift.Int? = nil, sessionStartTime: ClientRuntime.Date? = nil, sessionTimeout: Swift.Int? = nil ) { self.dlDr = dlDr self.dlFreq = dlFreq + self.pingSlotPeriod = pingSlotPeriod self.sessionStartTime = sessionStartTime self.sessionTimeout = sessionTimeout } @@ -14961,6 +14981,8 @@ extension IoTWirelessClientTypes.LoRaWANServiceProfile: Swift.Codable { case addGwMetadata = "AddGwMetadata" case drMax = "DrMax" case drMin = "DrMin" + case prAllowed = "PrAllowed" + case raAllowed = "RaAllowed" } public func encode(to encoder: Swift.Encoder) throws { @@ -14974,6 +14996,12 @@ extension IoTWirelessClientTypes.LoRaWANServiceProfile: Swift.Codable { if let drMin = self.drMin { try encodeContainer.encode(drMin, forKey: .drMin) } + if prAllowed != false { + try encodeContainer.encode(prAllowed, forKey: .prAllowed) + } + if raAllowed != false { + try encodeContainer.encode(raAllowed, forKey: .raAllowed) + } } public init (from decoder: Swift.Decoder) throws { @@ -14984,6 +15012,10 @@ extension IoTWirelessClientTypes.LoRaWANServiceProfile: Swift.Codable { drMin = drMinDecoded let drMaxDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .drMax) drMax = drMaxDecoded + let prAllowedDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .prAllowed) ?? false + prAllowed = prAllowedDecoded + let raAllowedDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .raAllowed) ?? false + raAllowed = raAllowedDecoded } } @@ -14996,16 +15028,24 @@ extension IoTWirelessClientTypes { public var drMax: Swift.Int? /// The DrMin value. public var drMin: Swift.Int? + /// The PRAllowed value that describes whether passive roaming is allowed. + public var prAllowed: Swift.Bool + /// The RAAllowed value that describes whether roaming activation is allowed. + public var raAllowed: Swift.Bool public init ( addGwMetadata: Swift.Bool = false, drMax: Swift.Int? = nil, - drMin: Swift.Int? = nil + drMin: Swift.Int? = nil, + prAllowed: Swift.Bool = false, + raAllowed: Swift.Bool = false ) { self.addGwMetadata = addGwMetadata self.drMax = drMax self.drMin = drMin + self.prAllowed = prAllowed + self.raAllowed = raAllowed } } @@ -21944,6 +21984,7 @@ extension UpdateWirelessGatewayInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case description = "Description" case joinEuiFilters = "JoinEuiFilters" + case maxEirp = "MaxEirp" case name = "Name" case netIdFilters = "NetIdFilters" } @@ -21962,6 +22003,9 @@ extension UpdateWirelessGatewayInput: Swift.Encodable { } } } + if let maxEirp = self.maxEirp { + try encodeContainer.encode(maxEirp, forKey: .maxEirp) + } if let name = self.name { try encodeContainer.encode(name, forKey: .name) } @@ -21991,6 +22035,8 @@ public struct UpdateWirelessGatewayInput: Swift.Equatable { public var id: Swift.String? /// A list of JoinEuiRange used by LoRa gateways to filter LoRa frames. public var joinEuiFilters: [[Swift.String]]? + /// The MaxEIRP value. + public var maxEirp: Swift.Float? /// The new name of the resource. public var name: Swift.String? /// A list of NetId values that are used by LoRa gateways to filter the uplink frames. @@ -22000,6 +22046,7 @@ public struct UpdateWirelessGatewayInput: Swift.Equatable { description: Swift.String? = nil, id: Swift.String? = nil, joinEuiFilters: [[Swift.String]]? = nil, + maxEirp: Swift.Float? = nil, name: Swift.String? = nil, netIdFilters: [Swift.String]? = nil ) @@ -22007,6 +22054,7 @@ public struct UpdateWirelessGatewayInput: Swift.Equatable { self.description = description self.id = id self.joinEuiFilters = joinEuiFilters + self.maxEirp = maxEirp self.name = name self.netIdFilters = netIdFilters } @@ -22017,12 +22065,14 @@ struct UpdateWirelessGatewayInputBody: Swift.Equatable { let description: Swift.String? let joinEuiFilters: [[Swift.String]]? let netIdFilters: [Swift.String]? + let maxEirp: Swift.Float? } extension UpdateWirelessGatewayInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case description = "Description" case joinEuiFilters = "JoinEuiFilters" + case maxEirp = "MaxEirp" case name = "Name" case netIdFilters = "NetIdFilters" } @@ -22064,6 +22114,8 @@ extension UpdateWirelessGatewayInputBody: Swift.Decodable { } } netIdFilters = netIdFiltersDecoded0 + let maxEirpDecoded = try containerValues.decodeIfPresent(Swift.Float.self, forKey: .maxEirp) + maxEirp = maxEirpDecoded } } diff --git a/Sources/Services/AWSLambda/LambdaClient.swift b/Sources/Services/AWSLambda/LambdaClient.swift index 884d349b7da..245874335ed 100644 --- a/Sources/Services/AWSLambda/LambdaClient.swift +++ b/Sources/Services/AWSLambda/LambdaClient.swift @@ -1339,7 +1339,7 @@ extension LambdaClient: LambdaClientProtocol { return result } - /// Configure your Lambda functions to stream response payloads back to clients. For more information, see [Configuring a Lambda function to stream responses](https://docs.aws.amazon.com/lambda/latest/dg/configuration-response-streaming.html). + /// Configure your Lambda functions to stream response payloads back to clients. For more information, see [Configuring a Lambda function to stream responses](https://docs.aws.amazon.com/lambda/latest/dg/configuration-response-streaming.html). This operation requires permission for the [lambda:InvokeFunction](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_awslambda.html) action. For details on how to set up permissions for cross-account invocations, see [Granting function access to other accounts](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html#permissions-resource-xaccountinvoke). public func invokeWithResponseStream(input: InvokeWithResponseStreamInput) async throws -> InvokeWithResponseStreamOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSLambda/LambdaClientProtocol.swift b/Sources/Services/AWSLambda/LambdaClientProtocol.swift index 3989ad7133f..9256fe1246c 100644 --- a/Sources/Services/AWSLambda/LambdaClientProtocol.swift +++ b/Sources/Services/AWSLambda/LambdaClientProtocol.swift @@ -140,7 +140,7 @@ public protocol LambdaClientProtocol { /// For asynchronous function invocation, use [Invoke]. Invokes a function asynchronously. @available(*, deprecated) func invokeAsync(input: InvokeAsyncInput) async throws -> InvokeAsyncOutputResponse - /// Configure your Lambda functions to stream response payloads back to clients. For more information, see [Configuring a Lambda function to stream responses](https://docs.aws.amazon.com/lambda/latest/dg/configuration-response-streaming.html). + /// Configure your Lambda functions to stream response payloads back to clients. For more information, see [Configuring a Lambda function to stream responses](https://docs.aws.amazon.com/lambda/latest/dg/configuration-response-streaming.html). This operation requires permission for the [lambda:InvokeFunction](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_awslambda.html) action. For details on how to set up permissions for cross-account invocations, see [Granting function access to other accounts](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html#permissions-resource-xaccountinvoke). func invokeWithResponseStream(input: InvokeWithResponseStreamInput) async throws -> InvokeWithResponseStreamOutputResponse /// Returns a list of [aliases](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html) for a Lambda function. func listAliases(input: ListAliasesInput) async throws -> ListAliasesOutputResponse diff --git a/Sources/Services/AWSLambda/models/Models.swift b/Sources/Services/AWSLambda/models/Models.swift index 5c9064b0677..d92df7ee045 100644 --- a/Sources/Services/AWSLambda/models/Models.swift +++ b/Sources/Services/AWSLambda/models/Models.swift @@ -2216,7 +2216,7 @@ public struct CreateEventSourceMappingOutputResponse: Swift.Equatable { public var lastProcessingResult: Swift.String? /// The maximum amount of time, in seconds, that Lambda spends gathering records before invoking the function. You can configure MaximumBatchingWindowInSeconds to any value from 0 seconds to 300 seconds in increments of seconds. For streams and Amazon SQS event sources, the default batching window is 0 seconds. For Amazon MSK, Self-managed Apache Kafka, Amazon MQ, and DocumentDB event sources, the default batching window is 500 ms. Note that because you can only change MaximumBatchingWindowInSeconds in increments of seconds, you cannot revert back to the 500 ms default batching window after you have changed it. To restore the default batching window, you must create a new event source mapping. Related setting: For streams and Amazon SQS event sources, when you set BatchSize to a value greater than 10, you must set MaximumBatchingWindowInSeconds to at least 1. public var maximumBatchingWindowInSeconds: Swift.Int? - /// (Kinesis and DynamoDB Streams only) Discard records older than the specified age. The default value is -1, which sets the maximum age to infinite. When the value is set to infinite, Lambda never discards old records. + /// (Kinesis and DynamoDB Streams only) Discard records older than the specified age. The default value is -1, which sets the maximum age to infinite. When the value is set to infinite, Lambda never discards old records. The minimum value that can be set is 60 seconds. public var maximumRecordAgeInSeconds: Swift.Int? /// (Kinesis and DynamoDB Streams only) Discard records after the specified number of retries. The default value is -1, which sets the maximum number of retries to infinite. When MaximumRetryAttempts is infinite, Lambda retries failed records until the record expires in the event source. public var maximumRetryAttempts: Swift.Int? @@ -3001,7 +3001,7 @@ public struct CreateFunctionOutputResponse: Swift.Equatable { public var revisionId: Swift.String? /// The function's execution role. public var role: Swift.String? - /// The runtime environment for the Lambda function. + /// The identifier of the function's [runtime](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html). Runtime is required if the deployment package is a .zip file archive. The following list includes deprecated runtimes. For more information, see [Runtime deprecation policy](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html#runtime-support-policy). public var runtime: LambdaClientTypes.Runtime? /// The ARN of the runtime and any errors that occured. public var runtimeVersionConfig: LambdaClientTypes.RuntimeVersionConfig? @@ -3862,7 +3862,7 @@ public struct DeleteEventSourceMappingOutputResponse: Swift.Equatable { public var lastProcessingResult: Swift.String? /// The maximum amount of time, in seconds, that Lambda spends gathering records before invoking the function. You can configure MaximumBatchingWindowInSeconds to any value from 0 seconds to 300 seconds in increments of seconds. For streams and Amazon SQS event sources, the default batching window is 0 seconds. For Amazon MSK, Self-managed Apache Kafka, Amazon MQ, and DocumentDB event sources, the default batching window is 500 ms. Note that because you can only change MaximumBatchingWindowInSeconds in increments of seconds, you cannot revert back to the 500 ms default batching window after you have changed it. To restore the default batching window, you must create a new event source mapping. Related setting: For streams and Amazon SQS event sources, when you set BatchSize to a value greater than 10, you must set MaximumBatchingWindowInSeconds to at least 1. public var maximumBatchingWindowInSeconds: Swift.Int? - /// (Kinesis and DynamoDB Streams only) Discard records older than the specified age. The default value is -1, which sets the maximum age to infinite. When the value is set to infinite, Lambda never discards old records. + /// (Kinesis and DynamoDB Streams only) Discard records older than the specified age. The default value is -1, which sets the maximum age to infinite. When the value is set to infinite, Lambda never discards old records. The minimum value that can be set is 60 seconds. public var maximumRecordAgeInSeconds: Swift.Int? /// (Kinesis and DynamoDB Streams only) Discard records after the specified number of retries. The default value is -1, which sets the maximum number of retries to infinite. When MaximumRetryAttempts is infinite, Lambda retries failed records until the record expires in the event source. public var maximumRetryAttempts: Swift.Int? @@ -5809,7 +5809,7 @@ extension LambdaClientTypes { public var lastProcessingResult: Swift.String? /// The maximum amount of time, in seconds, that Lambda spends gathering records before invoking the function. You can configure MaximumBatchingWindowInSeconds to any value from 0 seconds to 300 seconds in increments of seconds. For streams and Amazon SQS event sources, the default batching window is 0 seconds. For Amazon MSK, Self-managed Apache Kafka, Amazon MQ, and DocumentDB event sources, the default batching window is 500 ms. Note that because you can only change MaximumBatchingWindowInSeconds in increments of seconds, you cannot revert back to the 500 ms default batching window after you have changed it. To restore the default batching window, you must create a new event source mapping. Related setting: For streams and Amazon SQS event sources, when you set BatchSize to a value greater than 10, you must set MaximumBatchingWindowInSeconds to at least 1. public var maximumBatchingWindowInSeconds: Swift.Int? - /// (Kinesis and DynamoDB Streams only) Discard records older than the specified age. The default value is -1, which sets the maximum age to infinite. When the value is set to infinite, Lambda never discards old records. + /// (Kinesis and DynamoDB Streams only) Discard records older than the specified age. The default value is -1, which sets the maximum age to infinite. When the value is set to infinite, Lambda never discards old records. The minimum value that can be set is 60 seconds. public var maximumRecordAgeInSeconds: Swift.Int? /// (Kinesis and DynamoDB Streams only) Discard records after the specified number of retries. The default value is -1, which sets the maximum number of retries to infinite. When MaximumRetryAttempts is infinite, Lambda retries failed records until the record expires in the event source. public var maximumRetryAttempts: Swift.Int? @@ -6551,7 +6551,7 @@ extension LambdaClientTypes { public var revisionId: Swift.String? /// The function's execution role. public var role: Swift.String? - /// The runtime environment for the Lambda function. + /// The identifier of the function's [runtime](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html). Runtime is required if the deployment package is a .zip file archive. The following list includes deprecated runtimes. For more information, see [Runtime deprecation policy](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html#runtime-support-policy). public var runtime: LambdaClientTypes.Runtime? /// The ARN of the runtime and any errors that occured. public var runtimeVersionConfig: LambdaClientTypes.RuntimeVersionConfig? @@ -7442,7 +7442,7 @@ public struct GetEventSourceMappingOutputResponse: Swift.Equatable { public var lastProcessingResult: Swift.String? /// The maximum amount of time, in seconds, that Lambda spends gathering records before invoking the function. You can configure MaximumBatchingWindowInSeconds to any value from 0 seconds to 300 seconds in increments of seconds. For streams and Amazon SQS event sources, the default batching window is 0 seconds. For Amazon MSK, Self-managed Apache Kafka, Amazon MQ, and DocumentDB event sources, the default batching window is 500 ms. Note that because you can only change MaximumBatchingWindowInSeconds in increments of seconds, you cannot revert back to the 500 ms default batching window after you have changed it. To restore the default batching window, you must create a new event source mapping. Related setting: For streams and Amazon SQS event sources, when you set BatchSize to a value greater than 10, you must set MaximumBatchingWindowInSeconds to at least 1. public var maximumBatchingWindowInSeconds: Swift.Int? - /// (Kinesis and DynamoDB Streams only) Discard records older than the specified age. The default value is -1, which sets the maximum age to infinite. When the value is set to infinite, Lambda never discards old records. + /// (Kinesis and DynamoDB Streams only) Discard records older than the specified age. The default value is -1, which sets the maximum age to infinite. When the value is set to infinite, Lambda never discards old records. The minimum value that can be set is 60 seconds. public var maximumRecordAgeInSeconds: Swift.Int? /// (Kinesis and DynamoDB Streams only) Discard records after the specified number of retries. The default value is -1, which sets the maximum number of retries to infinite. When MaximumRetryAttempts is infinite, Lambda retries failed records until the record expires in the event source. public var maximumRetryAttempts: Swift.Int? @@ -8142,7 +8142,7 @@ public struct GetFunctionConfigurationOutputResponse: Swift.Equatable { public var revisionId: Swift.String? /// The function's execution role. public var role: Swift.String? - /// The runtime environment for the Lambda function. + /// The identifier of the function's [runtime](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html). Runtime is required if the deployment package is a .zip file archive. The following list includes deprecated runtimes. For more information, see [Runtime deprecation policy](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html#runtime-support-policy). public var runtime: LambdaClientTypes.Runtime? /// The ARN of the runtime and any errors that occured. public var runtimeVersionConfig: LambdaClientTypes.RuntimeVersionConfig? @@ -11375,6 +11375,9 @@ extension InvokeWithResponseStreamOutputError { case "ResourceNotFoundException" : self = .resourceNotFoundException(try ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "ResourceNotReadyException" : self = .resourceNotReadyException(try ResourceNotReadyException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "ServiceException" : self = .serviceException(try ServiceException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "SnapStartException" : self = .snapStartException(try SnapStartException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "SnapStartNotReadyException" : self = .snapStartNotReadyException(try SnapStartNotReadyException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "SnapStartTimeoutException" : self = .snapStartTimeoutException(try SnapStartTimeoutException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "SubnetIPAddressLimitReachedException" : self = .subnetIPAddressLimitReachedException(try SubnetIPAddressLimitReachedException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "UnsupportedMediaTypeException" : self = .unsupportedMediaTypeException(try UnsupportedMediaTypeException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) @@ -11407,6 +11410,9 @@ public enum InvokeWithResponseStreamOutputError: Swift.Error, Swift.Equatable { case resourceNotFoundException(ResourceNotFoundException) case resourceNotReadyException(ResourceNotReadyException) case serviceException(ServiceException) + case snapStartException(SnapStartException) + case snapStartNotReadyException(SnapStartNotReadyException) + case snapStartTimeoutException(SnapStartTimeoutException) case subnetIPAddressLimitReachedException(SubnetIPAddressLimitReachedException) case tooManyRequestsException(TooManyRequestsException) case unsupportedMediaTypeException(UnsupportedMediaTypeException) @@ -15079,7 +15085,7 @@ public struct PublishVersionOutputResponse: Swift.Equatable { public var revisionId: Swift.String? /// The function's execution role. public var role: Swift.String? - /// The runtime environment for the Lambda function. + /// The identifier of the function's [runtime](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html). Runtime is required if the deployment package is a .zip file archive. The following list includes deprecated runtimes. For more information, see [Runtime deprecation policy](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html#runtime-support-policy). public var runtime: LambdaClientTypes.Runtime? /// The ARN of the runtime and any errors that occured. public var runtimeVersionConfig: LambdaClientTypes.RuntimeVersionConfig? @@ -16867,6 +16873,7 @@ extension LambdaClientTypes { case provided case providedal2 case python27 + case python310 case python36 case python37 case python38 @@ -16899,6 +16906,7 @@ extension LambdaClientTypes { .provided, .providedal2, .python27, + .python310, .python36, .python37, .python38, @@ -16936,6 +16944,7 @@ extension LambdaClientTypes { case .provided: return "provided" case .providedal2: return "provided.al2" case .python27: return "python2.7" + case .python310: return "python3.10" case .python36: return "python3.6" case .python37: return "python3.7" case .python38: return "python3.8" @@ -19134,7 +19143,7 @@ public struct UpdateEventSourceMappingOutputResponse: Swift.Equatable { public var lastProcessingResult: Swift.String? /// The maximum amount of time, in seconds, that Lambda spends gathering records before invoking the function. You can configure MaximumBatchingWindowInSeconds to any value from 0 seconds to 300 seconds in increments of seconds. For streams and Amazon SQS event sources, the default batching window is 0 seconds. For Amazon MSK, Self-managed Apache Kafka, Amazon MQ, and DocumentDB event sources, the default batching window is 500 ms. Note that because you can only change MaximumBatchingWindowInSeconds in increments of seconds, you cannot revert back to the 500 ms default batching window after you have changed it. To restore the default batching window, you must create a new event source mapping. Related setting: For streams and Amazon SQS event sources, when you set BatchSize to a value greater than 10, you must set MaximumBatchingWindowInSeconds to at least 1. public var maximumBatchingWindowInSeconds: Swift.Int? - /// (Kinesis and DynamoDB Streams only) Discard records older than the specified age. The default value is -1, which sets the maximum age to infinite. When the value is set to infinite, Lambda never discards old records. + /// (Kinesis and DynamoDB Streams only) Discard records older than the specified age. The default value is -1, which sets the maximum age to infinite. When the value is set to infinite, Lambda never discards old records. The minimum value that can be set is 60 seconds. public var maximumRecordAgeInSeconds: Swift.Int? /// (Kinesis and DynamoDB Streams only) Discard records after the specified number of retries. The default value is -1, which sets the maximum number of retries to infinite. When MaximumRetryAttempts is infinite, Lambda retries failed records until the record expires in the event source. public var maximumRetryAttempts: Swift.Int? @@ -19727,7 +19736,7 @@ public struct UpdateFunctionCodeOutputResponse: Swift.Equatable { public var revisionId: Swift.String? /// The function's execution role. public var role: Swift.String? - /// The runtime environment for the Lambda function. + /// The identifier of the function's [runtime](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html). Runtime is required if the deployment package is a .zip file archive. The following list includes deprecated runtimes. For more information, see [Runtime deprecation policy](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html#runtime-support-policy). public var runtime: LambdaClientTypes.Runtime? /// The ARN of the runtime and any errors that occured. public var runtimeVersionConfig: LambdaClientTypes.RuntimeVersionConfig? @@ -20454,7 +20463,7 @@ public struct UpdateFunctionConfigurationOutputResponse: Swift.Equatable { public var revisionId: Swift.String? /// The function's execution role. public var role: Swift.String? - /// The runtime environment for the Lambda function. + /// The identifier of the function's [runtime](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html). Runtime is required if the deployment package is a .zip file archive. The following list includes deprecated runtimes. For more information, see [Runtime deprecation policy](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html#runtime-support-policy). public var runtime: LambdaClientTypes.Runtime? /// The ARN of the runtime and any errors that occured. public var runtimeVersionConfig: LambdaClientTypes.RuntimeVersionConfig? diff --git a/Sources/Services/AWSManagedBlockchain/models/Models.swift b/Sources/Services/AWSManagedBlockchain/models/Models.swift index 5334452035f..423eece1455 100644 --- a/Sources/Services/AWSManagedBlockchain/models/Models.swift +++ b/Sources/Services/AWSManagedBlockchain/models/Models.swift @@ -136,7 +136,7 @@ extension ManagedBlockchainClientTypes { public var status: ManagedBlockchainClientTypes.AccessorStatus? /// The tags assigned to the Accessor. For more information about tags, see [Tagging Resources](https://docs.aws.amazon.com/managed-blockchain/latest/ethereum-dev/tagging-resources.html) in the Amazon Managed Blockchain Ethereum Developer Guide, or [Tagging Resources](https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html) in the Amazon Managed Blockchain Hyperledger Fabric Developer Guide. public var tags: [Swift.String:Swift.String]? - /// The type of the accessor. Currently accessor type is restricted to BILLING_TOKEN. + /// The type of the accessor. Currently, accessor type is restricted to BILLING_TOKEN. public var type: ManagedBlockchainClientTypes.AccessorType? public init ( @@ -386,7 +386,7 @@ extension CreateAccessorInput: ClientRuntime.URLPathProvider { } public struct CreateAccessorInput: Swift.Equatable { - /// The type of accessor. Currently accessor type is restricted to BILLING_TOKEN. + /// The type of accessor. Currently, accessor type is restricted to BILLING_TOKEN. /// This member is required. public var accessorType: ManagedBlockchainClientTypes.AccessorType? /// This is a unique, case-sensitive identifier that you provide to ensure the idempotency of the operation. An idempotent operation completes no more than once. This identifier is required only if you make a service request directly using an HTTP client. It is generated automatically if you use an Amazon Web Services SDK or the Amazon Web Services CLI. @@ -982,8 +982,6 @@ public struct CreateNodeInput: Swift.Equatable { /// * n-ethereum-goerli /// /// * n-ethereum-rinkeby - /// - /// * n-ethereum-ropsten /// This member is required. public var networkId: Swift.String? /// The properties of a node configuration. @@ -1504,8 +1502,6 @@ public struct DeleteNodeInput: Swift.Equatable { /// * n-ethereum-goerli /// /// * n-ethereum-rinkeby - /// - /// * n-ethereum-ropsten /// This member is required. public var networkId: Swift.String? /// The unique identifier of the node. @@ -4069,9 +4065,9 @@ extension ManagedBlockchainClientTypes.MemberFabricConfiguration: Swift.CustomDe } extension ManagedBlockchainClientTypes { - /// Configuration properties for Hyperledger Fabric for a member in a Managed Blockchain network using the Hyperledger Fabric framework. + /// Configuration properties for Hyperledger Fabric for a member in a Managed Blockchain network that is using the Hyperledger Fabric framework. public struct MemberFabricConfiguration: Swift.Equatable { - /// The password for the member's initial administrative user. The AdminPassword must be at least eight characters long and no more than 32 characters. It must contain at least one uppercase letter, one lowercase letter, and one digit. It cannot have a single quotation mark (‘), a double quotation marks (“), a forward slash(/), a backward slash(\), @, or a space. + /// The password for the member's initial administrative user. The AdminPassword must be at least 8 characters long and no more than 32 characters. It must contain at least one uppercase letter, one lowercase letter, and one digit. It cannot have a single quotation mark (‘), a double quotation marks (“), a forward slash(/), a backward slash(\), @, or a space. /// This member is required. public var adminPassword: Swift.String? /// The user name for the member's initial administrative user. @@ -4506,7 +4502,7 @@ extension ManagedBlockchainClientTypes { public var status: ManagedBlockchainClientTypes.NetworkStatus? /// Tags assigned to the network. Each tag consists of a key and optional value. For more information about tags, see [Tagging Resources](https://docs.aws.amazon.com/managed-blockchain/latest/ethereum-dev/tagging-resources.html) in the Amazon Managed Blockchain Ethereum Developer Guide, or [Tagging Resources](https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html) in the Amazon Managed Blockchain Hyperledger Fabric Developer Guide. public var tags: [Swift.String:Swift.String]? - /// The voting rules for the network to decide if a proposal is accepted. + /// The voting rules that the network uses to decide if a proposal is accepted. public var votingPolicy: ManagedBlockchainClientTypes.VotingPolicy? /// The VPC endpoint service name of the VPC endpoint service of the network. Members use the VPC endpoint service name to create a VPC endpoint to access network resources. public var vpcEndpointServiceName: Swift.String? @@ -4572,8 +4568,6 @@ extension ManagedBlockchainClientTypes { /// * goerli = 5 /// /// * rinkeby = 4 - /// - /// * ropsten = 3 public var chainId: Swift.String? public init ( diff --git a/Sources/Services/AWSMediaConnect/MediaConnectClient.swift b/Sources/Services/AWSMediaConnect/MediaConnectClient.swift index 86b101c28c7..0bd7b64f448 100644 --- a/Sources/Services/AWSMediaConnect/MediaConnectClient.swift +++ b/Sources/Services/AWSMediaConnect/MediaConnectClient.swift @@ -130,6 +130,76 @@ public struct MediaConnectClientLogHandlerFactory: ClientRuntime.SDKLogHandlerFa } extension MediaConnectClient: MediaConnectClientProtocol { + /// Adds outputs to an existing bridge. + public func addBridgeOutputs(input: AddBridgeOutputsInput) async throws -> AddBridgeOutputsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "addBridgeOutputs") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "mediaconnect") + .withSigningRegion(value: config.signingRegion) + var operation = ClientRuntime.OperationStack(id: "addBridgeOutputs") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + 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: EndpointResolverMiddleware(endpointResolver: config.endpointResolver, endpointParams: endpointParams)) + let apiMetadata = AWSClientRuntime.APIMetadata(serviceId: serviceName, version: "1.0") + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromEnv(apiMetadata: apiMetadata, frameworkMetadata: config.frameworkMetadata))) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "AddBridgeOutputsRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryerMiddleware(retryer: config.retryer)) + let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false, signingAlgorithm: .sigv4) + operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config)) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context.build(), input: input, next: client.getHandler()) + return result + } + + /// Adds sources to an existing bridge. + public func addBridgeSources(input: AddBridgeSourcesInput) async throws -> AddBridgeSourcesOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "addBridgeSources") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "mediaconnect") + .withSigningRegion(value: config.signingRegion) + var operation = ClientRuntime.OperationStack(id: "addBridgeSources") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + 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: EndpointResolverMiddleware(endpointResolver: config.endpointResolver, endpointParams: endpointParams)) + let apiMetadata = AWSClientRuntime.APIMetadata(serviceId: serviceName, version: "1.0") + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromEnv(apiMetadata: apiMetadata, frameworkMetadata: config.frameworkMetadata))) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "AddBridgeSourcesRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryerMiddleware(retryer: config.retryer)) + let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false, signingAlgorithm: .sigv4) + operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config)) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context.build(), input: input, next: client.getHandler()) + return result + } + /// Adds media streams to an existing flow. After you add a media stream to a flow, you can associate it with a source and/or an output that uses the ST 2110 JPEG XS or CDI protocol. public func addFlowMediaStreams(input: AddFlowMediaStreamsInput) async throws -> AddFlowMediaStreamsOutputResponse { @@ -270,6 +340,41 @@ extension MediaConnectClient: MediaConnectClientProtocol { return result } + /// Creates a new bridge. The request must include one source. + public func createBridge(input: CreateBridgeInput) async throws -> CreateBridgeOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "createBridge") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "mediaconnect") + .withSigningRegion(value: config.signingRegion) + var operation = ClientRuntime.OperationStack(id: "createBridge") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + 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: EndpointResolverMiddleware(endpointResolver: config.endpointResolver, endpointParams: endpointParams)) + let apiMetadata = AWSClientRuntime.APIMetadata(serviceId: serviceName, version: "1.0") + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromEnv(apiMetadata: apiMetadata, frameworkMetadata: config.frameworkMetadata))) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "CreateBridgeRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryerMiddleware(retryer: config.retryer)) + let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false, signingAlgorithm: .sigv4) + operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config)) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context.build(), input: input, next: client.getHandler()) + return result + } + /// Creates a new flow. The request must include one source. The request optionally can include outputs (up to 50) and entitlements (up to 50). public func createFlow(input: CreateFlowInput) async throws -> CreateFlowOutputResponse { @@ -305,6 +410,73 @@ extension MediaConnectClient: MediaConnectClientProtocol { return result } + /// Creates a new gateway. The request must include at least one network (up to 4). + public func createGateway(input: CreateGatewayInput) async throws -> CreateGatewayOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "createGateway") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "mediaconnect") + .withSigningRegion(value: config.signingRegion) + var operation = ClientRuntime.OperationStack(id: "createGateway") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + 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: EndpointResolverMiddleware(endpointResolver: config.endpointResolver, endpointParams: endpointParams)) + let apiMetadata = AWSClientRuntime.APIMetadata(serviceId: serviceName, version: "1.0") + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromEnv(apiMetadata: apiMetadata, frameworkMetadata: config.frameworkMetadata))) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "CreateGatewayRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryerMiddleware(retryer: config.retryer)) + let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false, signingAlgorithm: .sigv4) + operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config)) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context.build(), input: input, next: client.getHandler()) + return result + } + + /// Deletes a bridge. Before you can delete a bridge, you must stop the bridge. + public func deleteBridge(input: DeleteBridgeInput) async throws -> DeleteBridgeOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "deleteBridge") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "mediaconnect") + .withSigningRegion(value: config.signingRegion) + var operation = ClientRuntime.OperationStack(id: "deleteBridge") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + 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: EndpointResolverMiddleware(endpointResolver: config.endpointResolver, endpointParams: endpointParams)) + let apiMetadata = AWSClientRuntime.APIMetadata(serviceId: serviceName, version: "1.0") + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromEnv(apiMetadata: apiMetadata, frameworkMetadata: config.frameworkMetadata))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryerMiddleware(retryer: config.retryer)) + let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false, signingAlgorithm: .sigv4) + operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config)) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context.build(), input: input, next: client.getHandler()) + return result + } + /// Deletes a flow. Before you can delete a flow, you must stop the flow. public func deleteFlow(input: DeleteFlowInput) async throws -> DeleteFlowOutputResponse { @@ -337,6 +509,103 @@ extension MediaConnectClient: MediaConnectClientProtocol { return result } + /// Deletes a gateway. Before you can delete a gateway, you must deregister its instances and delete its bridges. + public func deleteGateway(input: DeleteGatewayInput) async throws -> DeleteGatewayOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "deleteGateway") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "mediaconnect") + .withSigningRegion(value: config.signingRegion) + var operation = ClientRuntime.OperationStack(id: "deleteGateway") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + 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: EndpointResolverMiddleware(endpointResolver: config.endpointResolver, endpointParams: endpointParams)) + let apiMetadata = AWSClientRuntime.APIMetadata(serviceId: serviceName, version: "1.0") + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromEnv(apiMetadata: apiMetadata, frameworkMetadata: config.frameworkMetadata))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryerMiddleware(retryer: config.retryer)) + let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false, signingAlgorithm: .sigv4) + operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config)) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context.build(), input: input, next: client.getHandler()) + return result + } + + /// Deregisters an instance. Before you deregister an instance, all bridges running on the instance must be stopped. If you want to deregister an instance without stopping the bridges, you must use the --force option. + public func deregisterGatewayInstance(input: DeregisterGatewayInstanceInput) async throws -> DeregisterGatewayInstanceOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "deregisterGatewayInstance") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "mediaconnect") + .withSigningRegion(value: config.signingRegion) + var operation = ClientRuntime.OperationStack(id: "deregisterGatewayInstance") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + 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: EndpointResolverMiddleware(endpointResolver: config.endpointResolver, endpointParams: endpointParams)) + let apiMetadata = AWSClientRuntime.APIMetadata(serviceId: serviceName, version: "1.0") + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromEnv(apiMetadata: apiMetadata, frameworkMetadata: config.frameworkMetadata))) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryerMiddleware(retryer: config.retryer)) + let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false, signingAlgorithm: .sigv4) + operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config)) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context.build(), input: input, next: client.getHandler()) + return result + } + + /// Displays the details of a bridge. + public func describeBridge(input: DescribeBridgeInput) async throws -> DescribeBridgeOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "describeBridge") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "mediaconnect") + .withSigningRegion(value: config.signingRegion) + var operation = ClientRuntime.OperationStack(id: "describeBridge") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + 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: EndpointResolverMiddleware(endpointResolver: config.endpointResolver, endpointParams: endpointParams)) + let apiMetadata = AWSClientRuntime.APIMetadata(serviceId: serviceName, version: "1.0") + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromEnv(apiMetadata: apiMetadata, frameworkMetadata: config.frameworkMetadata))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryerMiddleware(retryer: config.retryer)) + let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false, signingAlgorithm: .sigv4) + operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config)) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context.build(), input: input, next: client.getHandler()) + return result + } + /// Displays the details of a flow. The response includes the flow ARN, name, and Availability Zone, as well as details about the source, outputs, and entitlements. public func describeFlow(input: DescribeFlowInput) async throws -> DescribeFlowOutputResponse { @@ -369,6 +638,70 @@ extension MediaConnectClient: MediaConnectClientProtocol { return result } + /// Displays the details of a gateway. The response includes the gateway ARN, name, and CIDR blocks, as well as details about the networks. + public func describeGateway(input: DescribeGatewayInput) async throws -> DescribeGatewayOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "describeGateway") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "mediaconnect") + .withSigningRegion(value: config.signingRegion) + var operation = ClientRuntime.OperationStack(id: "describeGateway") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + 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: EndpointResolverMiddleware(endpointResolver: config.endpointResolver, endpointParams: endpointParams)) + let apiMetadata = AWSClientRuntime.APIMetadata(serviceId: serviceName, version: "1.0") + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromEnv(apiMetadata: apiMetadata, frameworkMetadata: config.frameworkMetadata))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryerMiddleware(retryer: config.retryer)) + let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false, signingAlgorithm: .sigv4) + operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config)) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context.build(), input: input, next: client.getHandler()) + return result + } + + /// Displays the details of an instance. + public func describeGatewayInstance(input: DescribeGatewayInstanceInput) async throws -> DescribeGatewayInstanceOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "describeGatewayInstance") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "mediaconnect") + .withSigningRegion(value: config.signingRegion) + var operation = ClientRuntime.OperationStack(id: "describeGatewayInstance") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + 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: EndpointResolverMiddleware(endpointResolver: config.endpointResolver, endpointParams: endpointParams)) + let apiMetadata = AWSClientRuntime.APIMetadata(serviceId: serviceName, version: "1.0") + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromEnv(apiMetadata: apiMetadata, frameworkMetadata: config.frameworkMetadata))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryerMiddleware(retryer: config.retryer)) + let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false, signingAlgorithm: .sigv4) + operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config)) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context.build(), input: input, next: client.getHandler()) + return result + } + /// Displays the details of an offering. The response includes the offering description, duration, outbound bandwidth, price, and Amazon Resource Name (ARN). public func describeOffering(input: DescribeOfferingInput) async throws -> DescribeOfferingOutputResponse { @@ -468,6 +801,39 @@ extension MediaConnectClient: MediaConnectClientProtocol { return result } + /// Displays a list of bridges that are associated with this account and an optionally specified Arn. This request returns a paginated result. + public func listBridges(input: ListBridgesInput) async throws -> ListBridgesOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listBridges") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "mediaconnect") + .withSigningRegion(value: config.signingRegion) + var operation = ClientRuntime.OperationStack(id: "listBridges") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + 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: EndpointResolverMiddleware(endpointResolver: config.endpointResolver, endpointParams: endpointParams)) + let apiMetadata = AWSClientRuntime.APIMetadata(serviceId: serviceName, version: "1.0") + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromEnv(apiMetadata: apiMetadata, frameworkMetadata: config.frameworkMetadata))) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryerMiddleware(retryer: config.retryer)) + let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false, signingAlgorithm: .sigv4) + operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config)) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context.build(), input: input, next: client.getHandler()) + return result + } + /// Displays a list of all entitlements that have been granted to this account. This request returns 20 results per page. public func listEntitlements(input: ListEntitlementsInput) async throws -> ListEntitlementsOutputResponse { @@ -534,6 +900,72 @@ extension MediaConnectClient: MediaConnectClientProtocol { return result } + /// Displays a list of instances associated with the AWS account. This request returns a paginated result. You can use the filterArn property to display only the instances associated with the selected Gateway Amazon Resource Name (ARN). + public func listGatewayInstances(input: ListGatewayInstancesInput) async throws -> ListGatewayInstancesOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listGatewayInstances") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "mediaconnect") + .withSigningRegion(value: config.signingRegion) + var operation = ClientRuntime.OperationStack(id: "listGatewayInstances") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + 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: EndpointResolverMiddleware(endpointResolver: config.endpointResolver, endpointParams: endpointParams)) + let apiMetadata = AWSClientRuntime.APIMetadata(serviceId: serviceName, version: "1.0") + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromEnv(apiMetadata: apiMetadata, frameworkMetadata: config.frameworkMetadata))) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryerMiddleware(retryer: config.retryer)) + let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false, signingAlgorithm: .sigv4) + operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config)) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context.build(), input: input, next: client.getHandler()) + return result + } + + /// Displays a list of gateways that are associated with this account. This request returns a paginated result. + public func listGateways(input: ListGatewaysInput) async throws -> ListGatewaysOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listGateways") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "mediaconnect") + .withSigningRegion(value: config.signingRegion) + var operation = ClientRuntime.OperationStack(id: "listGateways") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + 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: EndpointResolverMiddleware(endpointResolver: config.endpointResolver, endpointParams: endpointParams)) + let apiMetadata = AWSClientRuntime.APIMetadata(serviceId: serviceName, version: "1.0") + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromEnv(apiMetadata: apiMetadata, frameworkMetadata: config.frameworkMetadata))) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryerMiddleware(retryer: config.retryer)) + let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false, signingAlgorithm: .sigv4) + operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config)) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context.build(), input: input, next: client.getHandler()) + return result + } + /// Displays a list of all offerings that are available to this account in the current AWS Region. If you have an active reservation (which means you've purchased an offering that has already started and hasn't expired yet), your account isn't eligible for other offerings. public func listOfferings(input: ListOfferingsInput) async throws -> ListOfferingsOutputResponse { @@ -667,6 +1099,70 @@ extension MediaConnectClient: MediaConnectClientProtocol { return result } + /// Removes an output from a bridge. + public func removeBridgeOutput(input: RemoveBridgeOutputInput) async throws -> RemoveBridgeOutputOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "removeBridgeOutput") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "mediaconnect") + .withSigningRegion(value: config.signingRegion) + var operation = ClientRuntime.OperationStack(id: "removeBridgeOutput") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + 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: EndpointResolverMiddleware(endpointResolver: config.endpointResolver, endpointParams: endpointParams)) + let apiMetadata = AWSClientRuntime.APIMetadata(serviceId: serviceName, version: "1.0") + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromEnv(apiMetadata: apiMetadata, frameworkMetadata: config.frameworkMetadata))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryerMiddleware(retryer: config.retryer)) + let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false, signingAlgorithm: .sigv4) + operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config)) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context.build(), input: input, next: client.getHandler()) + return result + } + + /// Removes a source from a bridge. + public func removeBridgeSource(input: RemoveBridgeSourceInput) async throws -> RemoveBridgeSourceOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "removeBridgeSource") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "mediaconnect") + .withSigningRegion(value: config.signingRegion) + var operation = ClientRuntime.OperationStack(id: "removeBridgeSource") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + 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: EndpointResolverMiddleware(endpointResolver: config.endpointResolver, endpointParams: endpointParams)) + let apiMetadata = AWSClientRuntime.APIMetadata(serviceId: serviceName, version: "1.0") + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromEnv(apiMetadata: apiMetadata, frameworkMetadata: config.frameworkMetadata))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryerMiddleware(retryer: config.retryer)) + let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false, signingAlgorithm: .sigv4) + operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config)) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context.build(), input: input, next: client.getHandler()) + return result + } + /// Removes a media stream from a flow. This action is only available if the media stream is not associated with a source or output. public func removeFlowMediaStream(input: RemoveFlowMediaStreamInput) async throws -> RemoveFlowMediaStreamOutputResponse { @@ -959,6 +1455,146 @@ extension MediaConnectClient: MediaConnectClientProtocol { return result } + /// Updates the bridge + public func updateBridge(input: UpdateBridgeInput) async throws -> UpdateBridgeOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .put) + .withServiceName(value: serviceName) + .withOperation(value: "updateBridge") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "mediaconnect") + .withSigningRegion(value: config.signingRegion) + var operation = ClientRuntime.OperationStack(id: "updateBridge") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + 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: EndpointResolverMiddleware(endpointResolver: config.endpointResolver, endpointParams: endpointParams)) + let apiMetadata = AWSClientRuntime.APIMetadata(serviceId: serviceName, version: "1.0") + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromEnv(apiMetadata: apiMetadata, frameworkMetadata: config.frameworkMetadata))) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "UpdateBridgeRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryerMiddleware(retryer: config.retryer)) + let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false, signingAlgorithm: .sigv4) + operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config)) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context.build(), input: input, next: client.getHandler()) + return result + } + + /// Updates an existing bridge output. + public func updateBridgeOutput(input: UpdateBridgeOutputInput) async throws -> UpdateBridgeOutputOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .put) + .withServiceName(value: serviceName) + .withOperation(value: "updateBridgeOutput") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "mediaconnect") + .withSigningRegion(value: config.signingRegion) + var operation = ClientRuntime.OperationStack(id: "updateBridgeOutput") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + 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: EndpointResolverMiddleware(endpointResolver: config.endpointResolver, endpointParams: endpointParams)) + let apiMetadata = AWSClientRuntime.APIMetadata(serviceId: serviceName, version: "1.0") + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromEnv(apiMetadata: apiMetadata, frameworkMetadata: config.frameworkMetadata))) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "UpdateBridgeOutputRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryerMiddleware(retryer: config.retryer)) + let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false, signingAlgorithm: .sigv4) + operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config)) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context.build(), input: input, next: client.getHandler()) + return result + } + + /// Updates an existing bridge source. + public func updateBridgeSource(input: UpdateBridgeSourceInput) async throws -> UpdateBridgeSourceOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .put) + .withServiceName(value: serviceName) + .withOperation(value: "updateBridgeSource") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "mediaconnect") + .withSigningRegion(value: config.signingRegion) + var operation = ClientRuntime.OperationStack(id: "updateBridgeSource") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + 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: EndpointResolverMiddleware(endpointResolver: config.endpointResolver, endpointParams: endpointParams)) + let apiMetadata = AWSClientRuntime.APIMetadata(serviceId: serviceName, version: "1.0") + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromEnv(apiMetadata: apiMetadata, frameworkMetadata: config.frameworkMetadata))) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "UpdateBridgeSourceRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryerMiddleware(retryer: config.retryer)) + let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false, signingAlgorithm: .sigv4) + operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config)) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context.build(), input: input, next: client.getHandler()) + return result + } + + /// Updates the bridge state + public func updateBridgeState(input: UpdateBridgeStateInput) async throws -> UpdateBridgeStateOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .put) + .withServiceName(value: serviceName) + .withOperation(value: "updateBridgeState") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "mediaconnect") + .withSigningRegion(value: config.signingRegion) + var operation = ClientRuntime.OperationStack(id: "updateBridgeState") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + 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: EndpointResolverMiddleware(endpointResolver: config.endpointResolver, endpointParams: endpointParams)) + let apiMetadata = AWSClientRuntime.APIMetadata(serviceId: serviceName, version: "1.0") + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromEnv(apiMetadata: apiMetadata, frameworkMetadata: config.frameworkMetadata))) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "UpdateBridgeStateRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryerMiddleware(retryer: config.retryer)) + let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false, signingAlgorithm: .sigv4) + operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config)) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context.build(), input: input, next: client.getHandler()) + return result + } + /// Updates flow public func updateFlow(input: UpdateFlowInput) async throws -> UpdateFlowOutputResponse { @@ -1134,4 +1770,39 @@ extension MediaConnectClient: MediaConnectClientProtocol { return result } + /// Updates the configuration of an existing Gateway Instance. + public func updateGatewayInstance(input: UpdateGatewayInstanceInput) async throws -> UpdateGatewayInstanceOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .put) + .withServiceName(value: serviceName) + .withOperation(value: "updateGatewayInstance") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "mediaconnect") + .withSigningRegion(value: config.signingRegion) + var operation = ClientRuntime.OperationStack(id: "updateGatewayInstance") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + 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: EndpointResolverMiddleware(endpointResolver: config.endpointResolver, endpointParams: endpointParams)) + let apiMetadata = AWSClientRuntime.APIMetadata(serviceId: serviceName, version: "1.0") + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromEnv(apiMetadata: apiMetadata, frameworkMetadata: config.frameworkMetadata))) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "UpdateGatewayInstanceRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryerMiddleware(retryer: config.retryer)) + let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false, signingAlgorithm: .sigv4) + operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config)) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context.build(), input: input, next: client.getHandler()) + return result + } + } diff --git a/Sources/Services/AWSMediaConnect/MediaConnectClientProtocol.swift b/Sources/Services/AWSMediaConnect/MediaConnectClientProtocol.swift index 9e7e0427c54..8d4f06a82bd 100644 --- a/Sources/Services/AWSMediaConnect/MediaConnectClientProtocol.swift +++ b/Sources/Services/AWSMediaConnect/MediaConnectClientProtocol.swift @@ -5,6 +5,10 @@ import ClientRuntime /// API for AWS Elemental MediaConnect public protocol MediaConnectClientProtocol { + /// Adds outputs to an existing bridge. + func addBridgeOutputs(input: AddBridgeOutputsInput) async throws -> AddBridgeOutputsOutputResponse + /// Adds sources to an existing bridge. + func addBridgeSources(input: AddBridgeSourcesInput) async throws -> AddBridgeSourcesOutputResponse /// Adds media streams to an existing flow. After you add a media stream to a flow, you can associate it with a source and/or an output that uses the ST 2110 JPEG XS or CDI protocol. func addFlowMediaStreams(input: AddFlowMediaStreamsInput) async throws -> AddFlowMediaStreamsOutputResponse /// Adds outputs to an existing flow. You can create up to 50 outputs per flow. @@ -13,22 +17,44 @@ public protocol MediaConnectClientProtocol { func addFlowSources(input: AddFlowSourcesInput) async throws -> AddFlowSourcesOutputResponse /// Adds VPC interfaces to flow func addFlowVpcInterfaces(input: AddFlowVpcInterfacesInput) async throws -> AddFlowVpcInterfacesOutputResponse + /// Creates a new bridge. The request must include one source. + func createBridge(input: CreateBridgeInput) async throws -> CreateBridgeOutputResponse /// Creates a new flow. The request must include one source. The request optionally can include outputs (up to 50) and entitlements (up to 50). func createFlow(input: CreateFlowInput) async throws -> CreateFlowOutputResponse + /// Creates a new gateway. The request must include at least one network (up to 4). + func createGateway(input: CreateGatewayInput) async throws -> CreateGatewayOutputResponse + /// Deletes a bridge. Before you can delete a bridge, you must stop the bridge. + func deleteBridge(input: DeleteBridgeInput) async throws -> DeleteBridgeOutputResponse /// Deletes a flow. Before you can delete a flow, you must stop the flow. func deleteFlow(input: DeleteFlowInput) async throws -> DeleteFlowOutputResponse + /// Deletes a gateway. Before you can delete a gateway, you must deregister its instances and delete its bridges. + func deleteGateway(input: DeleteGatewayInput) async throws -> DeleteGatewayOutputResponse + /// Deregisters an instance. Before you deregister an instance, all bridges running on the instance must be stopped. If you want to deregister an instance without stopping the bridges, you must use the --force option. + func deregisterGatewayInstance(input: DeregisterGatewayInstanceInput) async throws -> DeregisterGatewayInstanceOutputResponse + /// Displays the details of a bridge. + func describeBridge(input: DescribeBridgeInput) async throws -> DescribeBridgeOutputResponse /// Displays the details of a flow. The response includes the flow ARN, name, and Availability Zone, as well as details about the source, outputs, and entitlements. func describeFlow(input: DescribeFlowInput) async throws -> DescribeFlowOutputResponse + /// Displays the details of a gateway. The response includes the gateway ARN, name, and CIDR blocks, as well as details about the networks. + func describeGateway(input: DescribeGatewayInput) async throws -> DescribeGatewayOutputResponse + /// Displays the details of an instance. + func describeGatewayInstance(input: DescribeGatewayInstanceInput) async throws -> DescribeGatewayInstanceOutputResponse /// Displays the details of an offering. The response includes the offering description, duration, outbound bandwidth, price, and Amazon Resource Name (ARN). func describeOffering(input: DescribeOfferingInput) async throws -> DescribeOfferingOutputResponse /// Displays the details of a reservation. The response includes the reservation name, state, start date and time, and the details of the offering that make up the rest of the reservation (such as price, duration, and outbound bandwidth). func describeReservation(input: DescribeReservationInput) async throws -> DescribeReservationOutputResponse /// Grants entitlements to an existing flow. func grantFlowEntitlements(input: GrantFlowEntitlementsInput) async throws -> GrantFlowEntitlementsOutputResponse + /// Displays a list of bridges that are associated with this account and an optionally specified Arn. This request returns a paginated result. + func listBridges(input: ListBridgesInput) async throws -> ListBridgesOutputResponse /// Displays a list of all entitlements that have been granted to this account. This request returns 20 results per page. func listEntitlements(input: ListEntitlementsInput) async throws -> ListEntitlementsOutputResponse /// Displays a list of flows that are associated with this account. This request returns a paginated result. func listFlows(input: ListFlowsInput) async throws -> ListFlowsOutputResponse + /// Displays a list of instances associated with the AWS account. This request returns a paginated result. You can use the filterArn property to display only the instances associated with the selected Gateway Amazon Resource Name (ARN). + func listGatewayInstances(input: ListGatewayInstancesInput) async throws -> ListGatewayInstancesOutputResponse + /// Displays a list of gateways that are associated with this account. This request returns a paginated result. + func listGateways(input: ListGatewaysInput) async throws -> ListGatewaysOutputResponse /// Displays a list of all offerings that are available to this account in the current AWS Region. If you have an active reservation (which means you've purchased an offering that has already started and hasn't expired yet), your account isn't eligible for other offerings. func listOfferings(input: ListOfferingsInput) async throws -> ListOfferingsOutputResponse /// Displays a list of all reservations that have been purchased by this account in the current AWS Region. This list includes all reservations in all states (such as active and expired). @@ -37,6 +63,10 @@ public protocol MediaConnectClientProtocol { func listTagsForResource(input: ListTagsForResourceInput) async throws -> ListTagsForResourceOutputResponse /// Submits a request to purchase an offering. If you already have an active reservation, you can't purchase another offering. func purchaseOffering(input: PurchaseOfferingInput) async throws -> PurchaseOfferingOutputResponse + /// Removes an output from a bridge. + func removeBridgeOutput(input: RemoveBridgeOutputInput) async throws -> RemoveBridgeOutputOutputResponse + /// Removes a source from a bridge. + func removeBridgeSource(input: RemoveBridgeSourceInput) async throws -> RemoveBridgeSourceOutputResponse /// Removes a media stream from a flow. This action is only available if the media stream is not associated with a source or output. func removeFlowMediaStream(input: RemoveFlowMediaStreamInput) async throws -> RemoveFlowMediaStreamOutputResponse /// Removes an output from an existing flow. This request can be made only on an output that does not have an entitlement associated with it. If the output has an entitlement, you must revoke the entitlement instead. When an entitlement is revoked from a flow, the service automatically removes the associated output. @@ -55,6 +85,14 @@ public protocol MediaConnectClientProtocol { func tagResource(input: TagResourceInput) async throws -> TagResourceOutputResponse /// Deletes specified tags from a resource. func untagResource(input: UntagResourceInput) async throws -> UntagResourceOutputResponse + /// Updates the bridge + func updateBridge(input: UpdateBridgeInput) async throws -> UpdateBridgeOutputResponse + /// Updates an existing bridge output. + func updateBridgeOutput(input: UpdateBridgeOutputInput) async throws -> UpdateBridgeOutputOutputResponse + /// Updates an existing bridge source. + func updateBridgeSource(input: UpdateBridgeSourceInput) async throws -> UpdateBridgeSourceOutputResponse + /// Updates the bridge state + func updateBridgeState(input: UpdateBridgeStateInput) async throws -> UpdateBridgeStateOutputResponse /// Updates flow func updateFlow(input: UpdateFlowInput) async throws -> UpdateFlowOutputResponse /// You can change an entitlement's description, subscribers, and encryption. If you change the subscribers, the service will remove the outputs that are are used by the subscribers that are removed. @@ -65,6 +103,8 @@ public protocol MediaConnectClientProtocol { func updateFlowOutput(input: UpdateFlowOutputInput) async throws -> UpdateFlowOutputOutputResponse /// Updates the source of a flow. func updateFlowSource(input: UpdateFlowSourceInput) async throws -> UpdateFlowSourceOutputResponse + /// Updates the configuration of an existing Gateway Instance. + func updateGatewayInstance(input: UpdateGatewayInstanceInput) async throws -> UpdateGatewayInstanceOutputResponse } public protocol MediaConnectClientConfigurationProtocol : AWSClientRuntime.AWSClientConfiguration { diff --git a/Sources/Services/AWSMediaConnect/Paginators.swift b/Sources/Services/AWSMediaConnect/Paginators.swift index 437192b8d24..ee13a810b47 100644 --- a/Sources/Services/AWSMediaConnect/Paginators.swift +++ b/Sources/Services/AWSMediaConnect/Paginators.swift @@ -2,6 +2,37 @@ import ClientRuntime +extension MediaConnectClient { + /// Paginate over `[ListBridgesOutputResponse]` 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 `[ListBridgesInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListBridgesOutputResponse` + public func listBridgesPaginated(input: ListBridgesInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListBridgesInput.nextToken, outputKey: \ListBridgesOutputResponse.nextToken, paginationFunction: self.listBridges(input:)) + } +} + +extension ListBridgesInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListBridgesInput { + return ListBridgesInput( + filterArn: self.filterArn, + maxResults: self.maxResults, + nextToken: token + )} +} + +extension PaginatorSequence where Input == ListBridgesInput, Output == ListBridgesOutputResponse { + /// This paginator transforms the `AsyncSequence` returned by `listBridgesPaginated` + /// to access the nested member `[MediaConnectClientTypes.ListedBridge]` + /// - Returns: `[MediaConnectClientTypes.ListedBridge]` + public func bridges() async throws -> [MediaConnectClientTypes.ListedBridge] { + return try await self.asyncCompactMap { item in item.bridges } + } +} extension MediaConnectClient { /// Paginate over `[ListEntitlementsOutputResponse]` results. /// @@ -62,6 +93,67 @@ extension PaginatorSequence where Input == ListFlowsInput, Output == ListFlowsOu return try await self.asyncCompactMap { item in item.flows } } } +extension MediaConnectClient { + /// Paginate over `[ListGatewayInstancesOutputResponse]` 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 `[ListGatewayInstancesInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListGatewayInstancesOutputResponse` + public func listGatewayInstancesPaginated(input: ListGatewayInstancesInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListGatewayInstancesInput.nextToken, outputKey: \ListGatewayInstancesOutputResponse.nextToken, paginationFunction: self.listGatewayInstances(input:)) + } +} + +extension ListGatewayInstancesInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListGatewayInstancesInput { + return ListGatewayInstancesInput( + filterArn: self.filterArn, + maxResults: self.maxResults, + nextToken: token + )} +} + +extension PaginatorSequence where Input == ListGatewayInstancesInput, Output == ListGatewayInstancesOutputResponse { + /// This paginator transforms the `AsyncSequence` returned by `listGatewayInstancesPaginated` + /// to access the nested member `[MediaConnectClientTypes.ListedGatewayInstance]` + /// - Returns: `[MediaConnectClientTypes.ListedGatewayInstance]` + public func instances() async throws -> [MediaConnectClientTypes.ListedGatewayInstance] { + return try await self.asyncCompactMap { item in item.instances } + } +} +extension MediaConnectClient { + /// Paginate over `[ListGatewaysOutputResponse]` 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 `[ListGatewaysInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListGatewaysOutputResponse` + public func listGatewaysPaginated(input: ListGatewaysInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListGatewaysInput.nextToken, outputKey: \ListGatewaysOutputResponse.nextToken, paginationFunction: self.listGateways(input:)) + } +} + +extension ListGatewaysInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListGatewaysInput { + return ListGatewaysInput( + maxResults: self.maxResults, + nextToken: token + )} +} + +extension PaginatorSequence where Input == ListGatewaysInput, Output == ListGatewaysOutputResponse { + /// This paginator transforms the `AsyncSequence` returned by `listGatewaysPaginated` + /// to access the nested member `[MediaConnectClientTypes.ListedGateway]` + /// - Returns: `[MediaConnectClientTypes.ListedGateway]` + public func gateways() async throws -> [MediaConnectClientTypes.ListedGateway] { + return try await self.asyncCompactMap { item in item.gateways } + } +} extension MediaConnectClient { /// Paginate over `[ListOfferingsOutputResponse]` results. /// diff --git a/Sources/Services/AWSMediaConnect/models/Models.swift b/Sources/Services/AWSMediaConnect/models/Models.swift index 7be8239a61d..cf773dc8020 100644 --- a/Sources/Services/AWSMediaConnect/models/Models.swift +++ b/Sources/Services/AWSMediaConnect/models/Models.swift @@ -2,76 +2,339 @@ import AWSClientRuntime import ClientRuntime -extension AddFlowMediaStreamsInput: Swift.Encodable { +extension MediaConnectClientTypes.AddBridgeFlowSourceRequest: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case mediaStreams = "mediaStreams" + case flowArn = "flowArn" + case flowVpcInterfaceAttachment = "flowVpcInterfaceAttachment" + case name = "name" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let mediaStreams = mediaStreams { - var mediaStreamsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .mediaStreams) - for addmediastreamrequest0 in mediaStreams { - try mediaStreamsContainer.encode(addmediastreamrequest0) + if let flowArn = self.flowArn { + try encodeContainer.encode(flowArn, forKey: .flowArn) + } + if let flowVpcInterfaceAttachment = self.flowVpcInterfaceAttachment { + try encodeContainer.encode(flowVpcInterfaceAttachment, forKey: .flowVpcInterfaceAttachment) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) + flowArn = flowArnDecoded + let flowVpcInterfaceAttachmentDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.VpcInterfaceAttachment.self, forKey: .flowVpcInterfaceAttachment) + flowVpcInterfaceAttachment = flowVpcInterfaceAttachmentDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + } +} + +extension MediaConnectClientTypes { + /// Add a flow source to an existing bridge. + public struct AddBridgeFlowSourceRequest: Swift.Equatable { + /// The Amazon Resource Number (ARN) of the cloud flow to use as a source of this bridge. + /// This member is required. + public var flowArn: Swift.String? + /// The name of the VPC interface attachment to use for this source. + public var flowVpcInterfaceAttachment: MediaConnectClientTypes.VpcInterfaceAttachment? + /// The name of the flow source. This name is used to reference the source and must be unique among sources in this bridge. + /// This member is required. + public var name: Swift.String? + + public init ( + flowArn: Swift.String? = nil, + flowVpcInterfaceAttachment: MediaConnectClientTypes.VpcInterfaceAttachment? = nil, + name: Swift.String? = nil + ) + { + self.flowArn = flowArn + self.flowVpcInterfaceAttachment = flowVpcInterfaceAttachment + self.name = name + } + } + +} + +extension MediaConnectClientTypes.AddBridgeNetworkOutputRequest: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case ipAddress = "ipAddress" + case name = "name" + case networkName = "networkName" + case port = "port" + case `protocol` = "protocol" + case ttl = "ttl" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let ipAddress = self.ipAddress { + try encodeContainer.encode(ipAddress, forKey: .ipAddress) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let networkName = self.networkName { + try encodeContainer.encode(networkName, forKey: .networkName) + } + if let port = self.port { + try encodeContainer.encode(port, forKey: .port) + } + if let `protocol` = self.`protocol` { + try encodeContainer.encode(`protocol`.rawValue, forKey: .`protocol`) + } + if let ttl = self.ttl { + try encodeContainer.encode(ttl, forKey: .ttl) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let ipAddressDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .ipAddress) + ipAddress = ipAddressDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let networkNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .networkName) + networkName = networkNameDecoded + let portDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .port) + port = portDecoded + let protocolDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ModelProtocol.self, forKey: .protocol) + `protocol` = protocolDecoded + let ttlDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .ttl) + ttl = ttlDecoded + } +} + +extension MediaConnectClientTypes { + /// Add a network output to an existing bridge. + public struct AddBridgeNetworkOutputRequest: Swift.Equatable { + /// The network output IP Address. + /// This member is required. + public var ipAddress: Swift.String? + /// The network output name. This name is used to reference the output and must be unique among outputs in this bridge. + /// This member is required. + public var name: Swift.String? + /// The network output's gateway network name. + /// This member is required. + public var networkName: Swift.String? + /// The network output port. + /// This member is required. + public var port: Swift.Int? + /// The network output protocol. + /// This member is required. + public var `protocol`: MediaConnectClientTypes.ModelProtocol? + /// The network output TTL. + /// This member is required. + public var ttl: Swift.Int? + + public init ( + ipAddress: Swift.String? = nil, + name: Swift.String? = nil, + networkName: Swift.String? = nil, + port: Swift.Int? = nil, + `protocol`: MediaConnectClientTypes.ModelProtocol? = nil, + ttl: Swift.Int? = nil + ) + { + self.ipAddress = ipAddress + self.name = name + self.networkName = networkName + self.port = port + self.`protocol` = `protocol` + self.ttl = ttl + } + } + +} + +extension MediaConnectClientTypes.AddBridgeNetworkSourceRequest: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case multicastIp = "multicastIp" + case name = "name" + case networkName = "networkName" + case port = "port" + case `protocol` = "protocol" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let multicastIp = self.multicastIp { + try encodeContainer.encode(multicastIp, forKey: .multicastIp) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let networkName = self.networkName { + try encodeContainer.encode(networkName, forKey: .networkName) + } + if let port = self.port { + try encodeContainer.encode(port, forKey: .port) + } + if let `protocol` = self.`protocol` { + try encodeContainer.encode(`protocol`.rawValue, forKey: .`protocol`) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let multicastIpDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .multicastIp) + multicastIp = multicastIpDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let networkNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .networkName) + networkName = networkNameDecoded + let portDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .port) + port = portDecoded + let protocolDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ModelProtocol.self, forKey: .protocol) + `protocol` = protocolDecoded + } +} + +extension MediaConnectClientTypes { + /// Add a network source to an existing bridge. + public struct AddBridgeNetworkSourceRequest: Swift.Equatable { + /// The network source multicast IP. + /// This member is required. + public var multicastIp: Swift.String? + /// The name of the network source. This name is used to reference the source and must be unique among sources in this bridge. + /// This member is required. + public var name: Swift.String? + /// The network source's gateway network name. + /// This member is required. + public var networkName: Swift.String? + /// The network source port. + /// This member is required. + public var port: Swift.Int? + /// The network source protocol. + /// This member is required. + public var `protocol`: MediaConnectClientTypes.ModelProtocol? + + public init ( + multicastIp: Swift.String? = nil, + name: Swift.String? = nil, + networkName: Swift.String? = nil, + port: Swift.Int? = nil, + `protocol`: MediaConnectClientTypes.ModelProtocol? = nil + ) + { + self.multicastIp = multicastIp + self.name = name + self.networkName = networkName + self.port = port + self.`protocol` = `protocol` + } + } + +} + +extension MediaConnectClientTypes.AddBridgeOutputRequest: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case networkOutput = "networkOutput" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let networkOutput = self.networkOutput { + try encodeContainer.encode(networkOutput, forKey: .networkOutput) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let networkOutputDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.AddBridgeNetworkOutputRequest.self, forKey: .networkOutput) + networkOutput = networkOutputDecoded + } +} + +extension MediaConnectClientTypes { + /// Add an output to a bridge. + public struct AddBridgeOutputRequest: Swift.Equatable { + /// Add a network output to an existing bridge. + public var networkOutput: MediaConnectClientTypes.AddBridgeNetworkOutputRequest? + + public init ( + networkOutput: MediaConnectClientTypes.AddBridgeNetworkOutputRequest? = nil + ) + { + self.networkOutput = networkOutput + } + } + +} + +extension AddBridgeOutputsInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case outputs = "outputs" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let outputs = outputs { + var outputsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .outputs) + for addbridgeoutputrequest0 in outputs { + try outputsContainer.encode(addbridgeoutputrequest0) } } } } -extension AddFlowMediaStreamsInput: ClientRuntime.URLPathProvider { +extension AddBridgeOutputsInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let flowArn = flowArn else { + guard let bridgeArn = bridgeArn else { return nil } - return "/v1/flows/\(flowArn.urlPercentEncoding())/mediaStreams" + return "/v1/bridges/\(bridgeArn.urlPercentEncoding())/outputs" } } -/// A request to add media streams to the flow. -public struct AddFlowMediaStreamsInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the flow. +/// A request to add outputs to the specified bridge. +public struct AddBridgeOutputsInput: Swift.Equatable { + /// The ARN of the bridge that you want to update. /// This member is required. - public var flowArn: Swift.String? - /// The media streams that you want to add to the flow. + public var bridgeArn: Swift.String? + /// The outputs that you want to add to this bridge. /// This member is required. - public var mediaStreams: [MediaConnectClientTypes.AddMediaStreamRequest]? + public var outputs: [MediaConnectClientTypes.AddBridgeOutputRequest]? public init ( - flowArn: Swift.String? = nil, - mediaStreams: [MediaConnectClientTypes.AddMediaStreamRequest]? = nil + bridgeArn: Swift.String? = nil, + outputs: [MediaConnectClientTypes.AddBridgeOutputRequest]? = nil ) { - self.flowArn = flowArn - self.mediaStreams = mediaStreams + self.bridgeArn = bridgeArn + self.outputs = outputs } } -struct AddFlowMediaStreamsInputBody: Swift.Equatable { - let mediaStreams: [MediaConnectClientTypes.AddMediaStreamRequest]? +struct AddBridgeOutputsInputBody: Swift.Equatable { + let outputs: [MediaConnectClientTypes.AddBridgeOutputRequest]? } -extension AddFlowMediaStreamsInputBody: Swift.Decodable { +extension AddBridgeOutputsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case mediaStreams = "mediaStreams" + case outputs = "outputs" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let mediaStreamsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.AddMediaStreamRequest?].self, forKey: .mediaStreams) - var mediaStreamsDecoded0:[MediaConnectClientTypes.AddMediaStreamRequest]? = nil - if let mediaStreamsContainer = mediaStreamsContainer { - mediaStreamsDecoded0 = [MediaConnectClientTypes.AddMediaStreamRequest]() - for structure0 in mediaStreamsContainer { + let outputsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.AddBridgeOutputRequest?].self, forKey: .outputs) + var outputsDecoded0:[MediaConnectClientTypes.AddBridgeOutputRequest]? = nil + if let outputsContainer = outputsContainer { + outputsDecoded0 = [MediaConnectClientTypes.AddBridgeOutputRequest]() + for structure0 in outputsContainer { if let structure0 = structure0 { - mediaStreamsDecoded0?.append(structure0) + outputsDecoded0?.append(structure0) } } } - mediaStreams = mediaStreamsDecoded0 + outputs = outputsDecoded0 } } -extension AddFlowMediaStreamsOutputError: ClientRuntime.HttpResponseBinding { +extension AddBridgeOutputsOutputError: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) @@ -79,10 +342,11 @@ extension AddFlowMediaStreamsOutputError: ClientRuntime.HttpResponseBinding { } } -extension AddFlowMediaStreamsOutputError { +extension AddBridgeOutputsOutputError { public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { switch errorType { case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ConflictException" : self = .conflictException(try ConflictException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) @@ -93,8 +357,9 @@ extension AddFlowMediaStreamsOutputError { } } -public enum AddFlowMediaStreamsOutputError: Swift.Error, Swift.Equatable { +public enum AddBridgeOutputsOutputError: Swift.Error, Swift.Equatable { case badRequestException(BadRequestException) + case conflictException(ConflictException) case forbiddenException(ForbiddenException) case internalServerErrorException(InternalServerErrorException) case notFoundException(NotFoundException) @@ -103,190 +368,181 @@ public enum AddFlowMediaStreamsOutputError: Swift.Error, Swift.Equatable { case unknown(UnknownAWSHttpServiceError) } -extension AddFlowMediaStreamsOutputResponse: ClientRuntime.HttpResponseBinding { +extension AddBridgeOutputsOutputResponse: ClientRuntime.HttpResponseBinding { public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { if case .stream(let reader) = httpResponse.body, let responseDecoder = decoder { let data = reader.toBytes().getData() - let output: AddFlowMediaStreamsOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.flowArn = output.flowArn - self.mediaStreams = output.mediaStreams + let output: AddBridgeOutputsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.bridgeArn = output.bridgeArn + self.outputs = output.outputs } else { - self.flowArn = nil - self.mediaStreams = nil + self.bridgeArn = nil + self.outputs = nil } } } -public struct AddFlowMediaStreamsOutputResponse: Swift.Equatable { - /// The ARN of the flow that you added media streams to. - public var flowArn: Swift.String? - /// The media streams that you added to the flow. - public var mediaStreams: [MediaConnectClientTypes.MediaStream]? +public struct AddBridgeOutputsOutputResponse: Swift.Equatable { + /// The Amazon Resource Number (ARN) of the bridge. + public var bridgeArn: Swift.String? + /// The outputs that you added to this bridge. + public var outputs: [MediaConnectClientTypes.BridgeOutput]? public init ( - flowArn: Swift.String? = nil, - mediaStreams: [MediaConnectClientTypes.MediaStream]? = nil + bridgeArn: Swift.String? = nil, + outputs: [MediaConnectClientTypes.BridgeOutput]? = nil ) { - self.flowArn = flowArn - self.mediaStreams = mediaStreams + self.bridgeArn = bridgeArn + self.outputs = outputs } } -struct AddFlowMediaStreamsOutputResponseBody: Swift.Equatable { - let flowArn: Swift.String? - let mediaStreams: [MediaConnectClientTypes.MediaStream]? +struct AddBridgeOutputsOutputResponseBody: Swift.Equatable { + let bridgeArn: Swift.String? + let outputs: [MediaConnectClientTypes.BridgeOutput]? } -extension AddFlowMediaStreamsOutputResponseBody: Swift.Decodable { +extension AddBridgeOutputsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case flowArn = "flowArn" - case mediaStreams = "mediaStreams" + case bridgeArn = "bridgeArn" + case outputs = "outputs" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) - flowArn = flowArnDecoded - let mediaStreamsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.MediaStream?].self, forKey: .mediaStreams) - var mediaStreamsDecoded0:[MediaConnectClientTypes.MediaStream]? = nil - if let mediaStreamsContainer = mediaStreamsContainer { - mediaStreamsDecoded0 = [MediaConnectClientTypes.MediaStream]() - for structure0 in mediaStreamsContainer { + let bridgeArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .bridgeArn) + bridgeArn = bridgeArnDecoded + let outputsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.BridgeOutput?].self, forKey: .outputs) + var outputsDecoded0:[MediaConnectClientTypes.BridgeOutput]? = nil + if let outputsContainer = outputsContainer { + outputsDecoded0 = [MediaConnectClientTypes.BridgeOutput]() + for structure0 in outputsContainer { if let structure0 = structure0 { - mediaStreamsDecoded0?.append(structure0) + outputsDecoded0?.append(structure0) } } } - mediaStreams = mediaStreamsDecoded0 + outputs = outputsDecoded0 } } -extension AddFlowOutputs420Exception { - public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { - if case .stream(let reader) = httpResponse.body, - let responseDecoder = decoder { - let data = reader.toBytes().getData() - let output: AddFlowOutputs420ExceptionBody = try responseDecoder.decode(responseBody: data) - self.message = output.message - } else { - self.message = nil - } - self._headers = httpResponse.headers - self._statusCode = httpResponse.statusCode - self._requestID = requestID - self._message = message +extension MediaConnectClientTypes.AddBridgeSourceRequest: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case flowSource = "flowSource" + case networkSource = "networkSource" } -} -/// Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception. -public struct AddFlowOutputs420Exception: AWSClientRuntime.AWSHttpServiceError, Swift.Equatable { - public var _headers: ClientRuntime.Headers? - public var _statusCode: ClientRuntime.HttpStatusCode? - public var _message: Swift.String? - public var _requestID: Swift.String? - public var _retryable: Swift.Bool = false - public var _isThrottling: Swift.Bool = false - public var _type: ClientRuntime.ErrorType = .client - /// The error message returned by AWS Elemental MediaConnect. - /// This member is required. - public var message: Swift.String? + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let flowSource = self.flowSource { + try encodeContainer.encode(flowSource, forKey: .flowSource) + } + if let networkSource = self.networkSource { + try encodeContainer.encode(networkSource, forKey: .networkSource) + } + } - public init ( - message: Swift.String? = nil - ) - { - self.message = message + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let flowSourceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.AddBridgeFlowSourceRequest.self, forKey: .flowSource) + flowSource = flowSourceDecoded + let networkSourceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.AddBridgeNetworkSourceRequest.self, forKey: .networkSource) + networkSource = networkSourceDecoded } } -struct AddFlowOutputs420ExceptionBody: Swift.Equatable { - let message: Swift.String? -} +extension MediaConnectClientTypes { + /// Add a source to an existing bridge. + public struct AddBridgeSourceRequest: Swift.Equatable { + /// Add a flow source to an existing bridge. + public var flowSource: MediaConnectClientTypes.AddBridgeFlowSourceRequest? + /// Add a network source to an existing bridge. + public var networkSource: MediaConnectClientTypes.AddBridgeNetworkSourceRequest? -extension AddFlowOutputs420ExceptionBody: Swift.Decodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case message = "message" + public init ( + flowSource: MediaConnectClientTypes.AddBridgeFlowSourceRequest? = nil, + networkSource: MediaConnectClientTypes.AddBridgeNetworkSourceRequest? = nil + ) + { + self.flowSource = flowSource + self.networkSource = networkSource + } } - public init (from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) - message = messageDecoded - } } -extension AddFlowOutputsInput: Swift.Encodable { +extension AddBridgeSourcesInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case outputs = "outputs" + case sources = "sources" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let outputs = outputs { - var outputsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .outputs) - for addoutputrequest0 in outputs { - try outputsContainer.encode(addoutputrequest0) + if let sources = sources { + var sourcesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .sources) + for addbridgesourcerequest0 in sources { + try sourcesContainer.encode(addbridgesourcerequest0) } } } } -extension AddFlowOutputsInput: ClientRuntime.URLPathProvider { +extension AddBridgeSourcesInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let flowArn = flowArn else { + guard let bridgeArn = bridgeArn else { return nil } - return "/v1/flows/\(flowArn.urlPercentEncoding())/outputs" + return "/v1/bridges/\(bridgeArn.urlPercentEncoding())/sources" } } -/// A request to add outputs to the specified flow. -public struct AddFlowOutputsInput: Swift.Equatable { - /// The flow that you want to add outputs to. +/// A request to add sources to the specified bridge. +public struct AddBridgeSourcesInput: Swift.Equatable { + /// The ARN of the bridge that you want to update. /// This member is required. - public var flowArn: Swift.String? - /// A list of outputs that you want to add. + public var bridgeArn: Swift.String? + /// The sources that you want to add to this bridge. /// This member is required. - public var outputs: [MediaConnectClientTypes.AddOutputRequest]? + public var sources: [MediaConnectClientTypes.AddBridgeSourceRequest]? public init ( - flowArn: Swift.String? = nil, - outputs: [MediaConnectClientTypes.AddOutputRequest]? = nil + bridgeArn: Swift.String? = nil, + sources: [MediaConnectClientTypes.AddBridgeSourceRequest]? = nil ) { - self.flowArn = flowArn - self.outputs = outputs + self.bridgeArn = bridgeArn + self.sources = sources } } -struct AddFlowOutputsInputBody: Swift.Equatable { - let outputs: [MediaConnectClientTypes.AddOutputRequest]? +struct AddBridgeSourcesInputBody: Swift.Equatable { + let sources: [MediaConnectClientTypes.AddBridgeSourceRequest]? } -extension AddFlowOutputsInputBody: Swift.Decodable { +extension AddBridgeSourcesInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case outputs = "outputs" + case sources = "sources" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let outputsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.AddOutputRequest?].self, forKey: .outputs) - var outputsDecoded0:[MediaConnectClientTypes.AddOutputRequest]? = nil - if let outputsContainer = outputsContainer { - outputsDecoded0 = [MediaConnectClientTypes.AddOutputRequest]() - for structure0 in outputsContainer { + let sourcesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.AddBridgeSourceRequest?].self, forKey: .sources) + var sourcesDecoded0:[MediaConnectClientTypes.AddBridgeSourceRequest]? = nil + if let sourcesContainer = sourcesContainer { + sourcesDecoded0 = [MediaConnectClientTypes.AddBridgeSourceRequest]() + for structure0 in sourcesContainer { if let structure0 = structure0 { - outputsDecoded0?.append(structure0) + sourcesDecoded0?.append(structure0) } } } - outputs = outputsDecoded0 + sources = sourcesDecoded0 } } -extension AddFlowOutputsOutputError: ClientRuntime.HttpResponseBinding { +extension AddBridgeSourcesOutputError: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) @@ -294,11 +550,11 @@ extension AddFlowOutputsOutputError: ClientRuntime.HttpResponseBinding { } } -extension AddFlowOutputsOutputError { +extension AddBridgeSourcesOutputError { public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { switch errorType { - case "AddFlowOutputs420Exception" : self = .addFlowOutputs420Exception(try AddFlowOutputs420Exception(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ConflictException" : self = .conflictException(try ConflictException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) @@ -309,9 +565,9 @@ extension AddFlowOutputsOutputError { } } -public enum AddFlowOutputsOutputError: Swift.Error, Swift.Equatable { - case addFlowOutputs420Exception(AddFlowOutputs420Exception) +public enum AddBridgeSourcesOutputError: Swift.Error, Swift.Equatable { case badRequestException(BadRequestException) + case conflictException(ConflictException) case forbiddenException(ForbiddenException) case internalServerErrorException(InternalServerErrorException) case notFoundException(NotFoundException) @@ -320,136 +576,171 @@ public enum AddFlowOutputsOutputError: Swift.Error, Swift.Equatable { case unknown(UnknownAWSHttpServiceError) } -extension AddFlowOutputsOutputResponse: ClientRuntime.HttpResponseBinding { +extension AddBridgeSourcesOutputResponse: ClientRuntime.HttpResponseBinding { public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { if case .stream(let reader) = httpResponse.body, let responseDecoder = decoder { let data = reader.toBytes().getData() - let output: AddFlowOutputsOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.flowArn = output.flowArn - self.outputs = output.outputs + let output: AddBridgeSourcesOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.bridgeArn = output.bridgeArn + self.sources = output.sources } else { - self.flowArn = nil - self.outputs = nil + self.bridgeArn = nil + self.sources = nil } } } -public struct AddFlowOutputsOutputResponse: Swift.Equatable { - /// The ARN of the flow that these outputs were added to. - public var flowArn: Swift.String? - /// The details of the newly added outputs. - public var outputs: [MediaConnectClientTypes.Output]? +public struct AddBridgeSourcesOutputResponse: Swift.Equatable { + /// The Amazon Resource Number (ARN) of the bridge. + public var bridgeArn: Swift.String? + /// The sources that you added to this bridge. + public var sources: [MediaConnectClientTypes.BridgeSource]? public init ( - flowArn: Swift.String? = nil, - outputs: [MediaConnectClientTypes.Output]? = nil + bridgeArn: Swift.String? = nil, + sources: [MediaConnectClientTypes.BridgeSource]? = nil ) { - self.flowArn = flowArn - self.outputs = outputs + self.bridgeArn = bridgeArn + self.sources = sources } } -struct AddFlowOutputsOutputResponseBody: Swift.Equatable { - let flowArn: Swift.String? - let outputs: [MediaConnectClientTypes.Output]? +struct AddBridgeSourcesOutputResponseBody: Swift.Equatable { + let bridgeArn: Swift.String? + let sources: [MediaConnectClientTypes.BridgeSource]? } -extension AddFlowOutputsOutputResponseBody: Swift.Decodable { +extension AddBridgeSourcesOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case flowArn = "flowArn" - case outputs = "outputs" + case bridgeArn = "bridgeArn" + case sources = "sources" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) - flowArn = flowArnDecoded - let outputsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.Output?].self, forKey: .outputs) - var outputsDecoded0:[MediaConnectClientTypes.Output]? = nil - if let outputsContainer = outputsContainer { - outputsDecoded0 = [MediaConnectClientTypes.Output]() - for structure0 in outputsContainer { + let bridgeArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .bridgeArn) + bridgeArn = bridgeArnDecoded + let sourcesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.BridgeSource?].self, forKey: .sources) + var sourcesDecoded0:[MediaConnectClientTypes.BridgeSource]? = nil + if let sourcesContainer = sourcesContainer { + sourcesDecoded0 = [MediaConnectClientTypes.BridgeSource]() + for structure0 in sourcesContainer { if let structure0 = structure0 { - outputsDecoded0?.append(structure0) + sourcesDecoded0?.append(structure0) } } } - outputs = outputsDecoded0 + sources = sourcesDecoded0 } } -extension AddFlowSourcesInput: Swift.Encodable { +extension MediaConnectClientTypes.AddEgressGatewayBridgeRequest: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case sources = "sources" + case maxBitrate = "maxBitrate" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let sources = sources { - var sourcesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .sources) - for setsourcerequest0 in sources { - try sourcesContainer.encode(setsourcerequest0) + if let maxBitrate = self.maxBitrate { + try encodeContainer.encode(maxBitrate, forKey: .maxBitrate) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let maxBitrateDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxBitrate) + maxBitrate = maxBitrateDecoded + } +} + +extension MediaConnectClientTypes { + public struct AddEgressGatewayBridgeRequest: Swift.Equatable { + /// The maximum expected bitrate (in bps). + /// This member is required. + public var maxBitrate: Swift.Int? + + public init ( + maxBitrate: Swift.Int? = nil + ) + { + self.maxBitrate = maxBitrate + } + } + +} + +extension AddFlowMediaStreamsInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case mediaStreams = "mediaStreams" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let mediaStreams = mediaStreams { + var mediaStreamsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .mediaStreams) + for addmediastreamrequest0 in mediaStreams { + try mediaStreamsContainer.encode(addmediastreamrequest0) } } } } -extension AddFlowSourcesInput: ClientRuntime.URLPathProvider { +extension AddFlowMediaStreamsInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let flowArn = flowArn else { return nil } - return "/v1/flows/\(flowArn.urlPercentEncoding())/source" + return "/v1/flows/\(flowArn.urlPercentEncoding())/mediaStreams" } } -/// A request to add sources to the flow. -public struct AddFlowSourcesInput: Swift.Equatable { - /// The flow that you want to mutate. +/// A request to add media streams to the flow. +public struct AddFlowMediaStreamsInput: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the flow. /// This member is required. public var flowArn: Swift.String? - /// A list of sources that you want to add. + /// The media streams that you want to add to the flow. /// This member is required. - public var sources: [MediaConnectClientTypes.SetSourceRequest]? + public var mediaStreams: [MediaConnectClientTypes.AddMediaStreamRequest]? public init ( flowArn: Swift.String? = nil, - sources: [MediaConnectClientTypes.SetSourceRequest]? = nil + mediaStreams: [MediaConnectClientTypes.AddMediaStreamRequest]? = nil ) { self.flowArn = flowArn - self.sources = sources + self.mediaStreams = mediaStreams } } -struct AddFlowSourcesInputBody: Swift.Equatable { - let sources: [MediaConnectClientTypes.SetSourceRequest]? +struct AddFlowMediaStreamsInputBody: Swift.Equatable { + let mediaStreams: [MediaConnectClientTypes.AddMediaStreamRequest]? } -extension AddFlowSourcesInputBody: Swift.Decodable { +extension AddFlowMediaStreamsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case sources = "sources" + case mediaStreams = "mediaStreams" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let sourcesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.SetSourceRequest?].self, forKey: .sources) - var sourcesDecoded0:[MediaConnectClientTypes.SetSourceRequest]? = nil - if let sourcesContainer = sourcesContainer { - sourcesDecoded0 = [MediaConnectClientTypes.SetSourceRequest]() - for structure0 in sourcesContainer { + let mediaStreamsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.AddMediaStreamRequest?].self, forKey: .mediaStreams) + var mediaStreamsDecoded0:[MediaConnectClientTypes.AddMediaStreamRequest]? = nil + if let mediaStreamsContainer = mediaStreamsContainer { + mediaStreamsDecoded0 = [MediaConnectClientTypes.AddMediaStreamRequest]() + for structure0 in mediaStreamsContainer { if let structure0 = structure0 { - sourcesDecoded0?.append(structure0) + mediaStreamsDecoded0?.append(structure0) } } } - sources = sourcesDecoded0 + mediaStreams = mediaStreamsDecoded0 } } -extension AddFlowSourcesOutputError: ClientRuntime.HttpResponseBinding { +extension AddFlowMediaStreamsOutputError: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) @@ -457,7 +748,7 @@ extension AddFlowSourcesOutputError: ClientRuntime.HttpResponseBinding { } } -extension AddFlowSourcesOutputError { +extension AddFlowMediaStreamsOutputError { public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { switch errorType { case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) @@ -471,7 +762,7 @@ extension AddFlowSourcesOutputError { } } -public enum AddFlowSourcesOutputError: Swift.Error, Swift.Equatable { +public enum AddFlowMediaStreamsOutputError: Swift.Error, Swift.Equatable { case badRequestException(BadRequestException) case forbiddenException(ForbiddenException) case internalServerErrorException(InternalServerErrorException) @@ -481,136 +772,190 @@ public enum AddFlowSourcesOutputError: Swift.Error, Swift.Equatable { case unknown(UnknownAWSHttpServiceError) } -extension AddFlowSourcesOutputResponse: ClientRuntime.HttpResponseBinding { +extension AddFlowMediaStreamsOutputResponse: ClientRuntime.HttpResponseBinding { public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { if case .stream(let reader) = httpResponse.body, let responseDecoder = decoder { let data = reader.toBytes().getData() - let output: AddFlowSourcesOutputResponseBody = try responseDecoder.decode(responseBody: data) + let output: AddFlowMediaStreamsOutputResponseBody = try responseDecoder.decode(responseBody: data) self.flowArn = output.flowArn - self.sources = output.sources + self.mediaStreams = output.mediaStreams } else { self.flowArn = nil - self.sources = nil + self.mediaStreams = nil } } } -public struct AddFlowSourcesOutputResponse: Swift.Equatable { - /// The ARN of the flow that these sources were added to. +public struct AddFlowMediaStreamsOutputResponse: Swift.Equatable { + /// The ARN of the flow that you added media streams to. public var flowArn: Swift.String? - /// The details of the newly added sources. - public var sources: [MediaConnectClientTypes.Source]? + /// The media streams that you added to the flow. + public var mediaStreams: [MediaConnectClientTypes.MediaStream]? public init ( flowArn: Swift.String? = nil, - sources: [MediaConnectClientTypes.Source]? = nil + mediaStreams: [MediaConnectClientTypes.MediaStream]? = nil ) { self.flowArn = flowArn - self.sources = sources + self.mediaStreams = mediaStreams } } -struct AddFlowSourcesOutputResponseBody: Swift.Equatable { +struct AddFlowMediaStreamsOutputResponseBody: Swift.Equatable { let flowArn: Swift.String? - let sources: [MediaConnectClientTypes.Source]? + let mediaStreams: [MediaConnectClientTypes.MediaStream]? } -extension AddFlowSourcesOutputResponseBody: Swift.Decodable { +extension AddFlowMediaStreamsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case flowArn = "flowArn" - case sources = "sources" + case mediaStreams = "mediaStreams" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) flowArn = flowArnDecoded - let sourcesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.Source?].self, forKey: .sources) - var sourcesDecoded0:[MediaConnectClientTypes.Source]? = nil - if let sourcesContainer = sourcesContainer { - sourcesDecoded0 = [MediaConnectClientTypes.Source]() - for structure0 in sourcesContainer { + let mediaStreamsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.MediaStream?].self, forKey: .mediaStreams) + var mediaStreamsDecoded0:[MediaConnectClientTypes.MediaStream]? = nil + if let mediaStreamsContainer = mediaStreamsContainer { + mediaStreamsDecoded0 = [MediaConnectClientTypes.MediaStream]() + for structure0 in mediaStreamsContainer { if let structure0 = structure0 { - sourcesDecoded0?.append(structure0) + mediaStreamsDecoded0?.append(structure0) } } } - sources = sourcesDecoded0 + mediaStreams = mediaStreamsDecoded0 } } -extension AddFlowVpcInterfacesInput: Swift.Encodable { +extension AddFlowOutputs420Exception { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: AddFlowOutputs420ExceptionBody = try responseDecoder.decode(responseBody: data) + self.message = output.message + } else { + self.message = nil + } + self._headers = httpResponse.headers + self._statusCode = httpResponse.statusCode + self._requestID = requestID + self._message = message + } +} + +/// Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception. +public struct AddFlowOutputs420Exception: AWSClientRuntime.AWSHttpServiceError, Swift.Equatable { + public var _headers: ClientRuntime.Headers? + public var _statusCode: ClientRuntime.HttpStatusCode? + public var _message: Swift.String? + public var _requestID: Swift.String? + public var _retryable: Swift.Bool = false + public var _isThrottling: Swift.Bool = false + public var _type: ClientRuntime.ErrorType = .client + /// The error message returned by AWS Elemental MediaConnect. + /// This member is required. + public var message: Swift.String? + + public init ( + message: Swift.String? = nil + ) + { + self.message = message + } +} + +struct AddFlowOutputs420ExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension AddFlowOutputs420ExceptionBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case vpcInterfaces = "vpcInterfaces" + case message = "message" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) + message = messageDecoded + } +} + +extension AddFlowOutputsInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case outputs = "outputs" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let vpcInterfaces = vpcInterfaces { - var vpcInterfacesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .vpcInterfaces) - for vpcinterfacerequest0 in vpcInterfaces { - try vpcInterfacesContainer.encode(vpcinterfacerequest0) + if let outputs = outputs { + var outputsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .outputs) + for addoutputrequest0 in outputs { + try outputsContainer.encode(addoutputrequest0) } } } } -extension AddFlowVpcInterfacesInput: ClientRuntime.URLPathProvider { +extension AddFlowOutputsInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let flowArn = flowArn else { return nil } - return "/v1/flows/\(flowArn.urlPercentEncoding())/vpcInterfaces" + return "/v1/flows/\(flowArn.urlPercentEncoding())/outputs" } } -/// A request to add VPC interfaces to the flow. -public struct AddFlowVpcInterfacesInput: Swift.Equatable { - /// The flow that you want to mutate. +/// A request to add outputs to the specified flow. +public struct AddFlowOutputsInput: Swift.Equatable { + /// The flow that you want to add outputs to. /// This member is required. public var flowArn: Swift.String? - /// A list of VPC interfaces that you want to add. + /// A list of outputs that you want to add. /// This member is required. - public var vpcInterfaces: [MediaConnectClientTypes.VpcInterfaceRequest]? + public var outputs: [MediaConnectClientTypes.AddOutputRequest]? public init ( flowArn: Swift.String? = nil, - vpcInterfaces: [MediaConnectClientTypes.VpcInterfaceRequest]? = nil + outputs: [MediaConnectClientTypes.AddOutputRequest]? = nil ) { self.flowArn = flowArn - self.vpcInterfaces = vpcInterfaces + self.outputs = outputs } } -struct AddFlowVpcInterfacesInputBody: Swift.Equatable { - let vpcInterfaces: [MediaConnectClientTypes.VpcInterfaceRequest]? +struct AddFlowOutputsInputBody: Swift.Equatable { + let outputs: [MediaConnectClientTypes.AddOutputRequest]? } -extension AddFlowVpcInterfacesInputBody: Swift.Decodable { +extension AddFlowOutputsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case vpcInterfaces = "vpcInterfaces" + case outputs = "outputs" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let vpcInterfacesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.VpcInterfaceRequest?].self, forKey: .vpcInterfaces) - var vpcInterfacesDecoded0:[MediaConnectClientTypes.VpcInterfaceRequest]? = nil - if let vpcInterfacesContainer = vpcInterfacesContainer { - vpcInterfacesDecoded0 = [MediaConnectClientTypes.VpcInterfaceRequest]() - for structure0 in vpcInterfacesContainer { + let outputsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.AddOutputRequest?].self, forKey: .outputs) + var outputsDecoded0:[MediaConnectClientTypes.AddOutputRequest]? = nil + if let outputsContainer = outputsContainer { + outputsDecoded0 = [MediaConnectClientTypes.AddOutputRequest]() + for structure0 in outputsContainer { if let structure0 = structure0 { - vpcInterfacesDecoded0?.append(structure0) + outputsDecoded0?.append(structure0) } } } - vpcInterfaces = vpcInterfacesDecoded0 + outputs = outputsDecoded0 } } -extension AddFlowVpcInterfacesOutputError: ClientRuntime.HttpResponseBinding { +extension AddFlowOutputsOutputError: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) @@ -618,9 +963,10 @@ extension AddFlowVpcInterfacesOutputError: ClientRuntime.HttpResponseBinding { } } -extension AddFlowVpcInterfacesOutputError { +extension AddFlowOutputsOutputError { public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { switch errorType { + case "AddFlowOutputs420Exception" : self = .addFlowOutputs420Exception(try AddFlowOutputs420Exception(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) @@ -632,7 +978,8 @@ extension AddFlowVpcInterfacesOutputError { } } -public enum AddFlowVpcInterfacesOutputError: Swift.Error, Swift.Equatable { +public enum AddFlowOutputsOutputError: Swift.Error, Swift.Equatable { + case addFlowOutputs420Exception(AddFlowOutputs420Exception) case badRequestException(BadRequestException) case forbiddenException(ForbiddenException) case internalServerErrorException(InternalServerErrorException) @@ -642,1269 +989,1844 @@ public enum AddFlowVpcInterfacesOutputError: Swift.Error, Swift.Equatable { case unknown(UnknownAWSHttpServiceError) } -extension AddFlowVpcInterfacesOutputResponse: ClientRuntime.HttpResponseBinding { +extension AddFlowOutputsOutputResponse: ClientRuntime.HttpResponseBinding { public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { if case .stream(let reader) = httpResponse.body, let responseDecoder = decoder { let data = reader.toBytes().getData() - let output: AddFlowVpcInterfacesOutputResponseBody = try responseDecoder.decode(responseBody: data) + let output: AddFlowOutputsOutputResponseBody = try responseDecoder.decode(responseBody: data) self.flowArn = output.flowArn - self.vpcInterfaces = output.vpcInterfaces + self.outputs = output.outputs } else { self.flowArn = nil - self.vpcInterfaces = nil + self.outputs = nil } } } -public struct AddFlowVpcInterfacesOutputResponse: Swift.Equatable { - /// The ARN of the flow that these VPC interfaces were added to. +public struct AddFlowOutputsOutputResponse: Swift.Equatable { + /// The ARN of the flow that these outputs were added to. public var flowArn: Swift.String? - /// The details of the newly added VPC interfaces. - public var vpcInterfaces: [MediaConnectClientTypes.VpcInterface]? + /// The details of the newly added outputs. + public var outputs: [MediaConnectClientTypes.Output]? public init ( flowArn: Swift.String? = nil, - vpcInterfaces: [MediaConnectClientTypes.VpcInterface]? = nil + outputs: [MediaConnectClientTypes.Output]? = nil ) { self.flowArn = flowArn - self.vpcInterfaces = vpcInterfaces + self.outputs = outputs } } -struct AddFlowVpcInterfacesOutputResponseBody: Swift.Equatable { +struct AddFlowOutputsOutputResponseBody: Swift.Equatable { let flowArn: Swift.String? - let vpcInterfaces: [MediaConnectClientTypes.VpcInterface]? + let outputs: [MediaConnectClientTypes.Output]? } -extension AddFlowVpcInterfacesOutputResponseBody: Swift.Decodable { +extension AddFlowOutputsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case flowArn = "flowArn" - case vpcInterfaces = "vpcInterfaces" + case outputs = "outputs" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) flowArn = flowArnDecoded - let vpcInterfacesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.VpcInterface?].self, forKey: .vpcInterfaces) - var vpcInterfacesDecoded0:[MediaConnectClientTypes.VpcInterface]? = nil - if let vpcInterfacesContainer = vpcInterfacesContainer { - vpcInterfacesDecoded0 = [MediaConnectClientTypes.VpcInterface]() - for structure0 in vpcInterfacesContainer { + let outputsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.Output?].self, forKey: .outputs) + var outputsDecoded0:[MediaConnectClientTypes.Output]? = nil + if let outputsContainer = outputsContainer { + outputsDecoded0 = [MediaConnectClientTypes.Output]() + for structure0 in outputsContainer { if let structure0 = structure0 { - vpcInterfacesDecoded0?.append(structure0) + outputsDecoded0?.append(structure0) } } } - vpcInterfaces = vpcInterfacesDecoded0 + outputs = outputsDecoded0 } } -extension MediaConnectClientTypes.AddMaintenance: Swift.Codable { +extension AddFlowSourcesInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case maintenanceDay = "maintenanceDay" - case maintenanceStartHour = "maintenanceStartHour" + case sources = "sources" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let maintenanceDay = self.maintenanceDay { - try encodeContainer.encode(maintenanceDay.rawValue, forKey: .maintenanceDay) - } - if let maintenanceStartHour = self.maintenanceStartHour { - try encodeContainer.encode(maintenanceStartHour, forKey: .maintenanceStartHour) + if let sources = sources { + var sourcesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .sources) + for setsourcerequest0 in sources { + try sourcesContainer.encode(setsourcerequest0) + } } } +} - public init (from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let maintenanceDayDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.MaintenanceDay.self, forKey: .maintenanceDay) - maintenanceDay = maintenanceDayDecoded - let maintenanceStartHourDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .maintenanceStartHour) - maintenanceStartHour = maintenanceStartHourDecoded +extension AddFlowSourcesInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let flowArn = flowArn else { + return nil + } + return "/v1/flows/\(flowArn.urlPercentEncoding())/source" } } -extension MediaConnectClientTypes { - /// Create maintenance setting for a flow - public struct AddMaintenance: Swift.Equatable { - /// A day of a week when the maintenance will happen. Use Monday/Tuesday/Wednesday/Thursday/Friday/Saturday/Sunday. - /// This member is required. - public var maintenanceDay: MediaConnectClientTypes.MaintenanceDay? - /// UTC time when the maintenance will happen. Use 24-hour HH:MM format. Minutes must be 00. Example: 13:00. The default value is 02:00. - /// This member is required. - public var maintenanceStartHour: Swift.String? +/// A request to add sources to the flow. +public struct AddFlowSourcesInput: Swift.Equatable { + /// The flow that you want to mutate. + /// This member is required. + public var flowArn: Swift.String? + /// A list of sources that you want to add. + /// This member is required. + public var sources: [MediaConnectClientTypes.SetSourceRequest]? - public init ( - maintenanceDay: MediaConnectClientTypes.MaintenanceDay? = nil, - maintenanceStartHour: Swift.String? = nil - ) - { - self.maintenanceDay = maintenanceDay - self.maintenanceStartHour = maintenanceStartHour - } + public init ( + flowArn: Swift.String? = nil, + sources: [MediaConnectClientTypes.SetSourceRequest]? = nil + ) + { + self.flowArn = flowArn + self.sources = sources } +} +struct AddFlowSourcesInputBody: Swift.Equatable { + let sources: [MediaConnectClientTypes.SetSourceRequest]? } -extension MediaConnectClientTypes.AddMediaStreamRequest: Swift.Codable { +extension AddFlowSourcesInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case attributes = "attributes" - case clockRate = "clockRate" - case description = "description" - case mediaStreamId = "mediaStreamId" - case mediaStreamName = "mediaStreamName" - case mediaStreamType = "mediaStreamType" - case videoFormat = "videoFormat" + case sources = "sources" } - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let attributes = self.attributes { - try encodeContainer.encode(attributes, forKey: .attributes) - } - if let clockRate = self.clockRate { - try encodeContainer.encode(clockRate, forKey: .clockRate) - } - if let description = self.description { - try encodeContainer.encode(description, forKey: .description) - } - if let mediaStreamId = self.mediaStreamId { - try encodeContainer.encode(mediaStreamId, forKey: .mediaStreamId) - } - if let mediaStreamName = self.mediaStreamName { - try encodeContainer.encode(mediaStreamName, forKey: .mediaStreamName) + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let sourcesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.SetSourceRequest?].self, forKey: .sources) + var sourcesDecoded0:[MediaConnectClientTypes.SetSourceRequest]? = nil + if let sourcesContainer = sourcesContainer { + sourcesDecoded0 = [MediaConnectClientTypes.SetSourceRequest]() + for structure0 in sourcesContainer { + if let structure0 = structure0 { + sourcesDecoded0?.append(structure0) + } + } } - if let mediaStreamType = self.mediaStreamType { - try encodeContainer.encode(mediaStreamType.rawValue, forKey: .mediaStreamType) + sources = sourcesDecoded0 + } +} + +extension AddFlowSourcesOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} + +extension AddFlowSourcesOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) } - if let videoFormat = self.videoFormat { - try encodeContainer.encode(videoFormat, forKey: .videoFormat) + } +} + +public enum AddFlowSourcesOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case forbiddenException(ForbiddenException) + case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) +} + +extension AddFlowSourcesOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: AddFlowSourcesOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.flowArn = output.flowArn + self.sources = output.sources + } else { + self.flowArn = nil + self.sources = nil } } +} - public init (from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let attributesDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.MediaStreamAttributesRequest.self, forKey: .attributes) - attributes = attributesDecoded - let clockRateDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .clockRate) - clockRate = clockRateDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let mediaStreamIdDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .mediaStreamId) - mediaStreamId = mediaStreamIdDecoded - let mediaStreamNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .mediaStreamName) - mediaStreamName = mediaStreamNameDecoded - let mediaStreamTypeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.MediaStreamType.self, forKey: .mediaStreamType) - mediaStreamType = mediaStreamTypeDecoded - let videoFormatDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .videoFormat) - videoFormat = videoFormatDecoded +public struct AddFlowSourcesOutputResponse: Swift.Equatable { + /// The ARN of the flow that these sources were added to. + public var flowArn: Swift.String? + /// The details of the newly added sources. + public var sources: [MediaConnectClientTypes.Source]? + + public init ( + flowArn: Swift.String? = nil, + sources: [MediaConnectClientTypes.Source]? = nil + ) + { + self.flowArn = flowArn + self.sources = sources } } -extension MediaConnectClientTypes { - /// The media stream that you want to add to the flow. - public struct AddMediaStreamRequest: Swift.Equatable { - /// The attributes that you want to assign to the new media stream. - public var attributes: MediaConnectClientTypes.MediaStreamAttributesRequest? - /// The sample rate (in Hz) for the stream. If the media stream type is video or ancillary data, set this value to 90000. If the media stream type is audio, set this value to either 48000 or 96000. - public var clockRate: Swift.Int? - /// A description that can help you quickly identify what your media stream is used for. - public var description: Swift.String? - /// A unique identifier for the media stream. - /// This member is required. - public var mediaStreamId: Swift.Int? - /// A name that helps you distinguish one media stream from another. - /// This member is required. - public var mediaStreamName: Swift.String? - /// The type of media stream. - /// This member is required. - public var mediaStreamType: MediaConnectClientTypes.MediaStreamType? - /// The resolution of the video. - public var videoFormat: Swift.String? +struct AddFlowSourcesOutputResponseBody: Swift.Equatable { + let flowArn: Swift.String? + let sources: [MediaConnectClientTypes.Source]? +} - public init ( - attributes: MediaConnectClientTypes.MediaStreamAttributesRequest? = nil, - clockRate: Swift.Int? = nil, - description: Swift.String? = nil, - mediaStreamId: Swift.Int? = nil, - mediaStreamName: Swift.String? = nil, - mediaStreamType: MediaConnectClientTypes.MediaStreamType? = nil, - videoFormat: Swift.String? = nil - ) - { - self.attributes = attributes - self.clockRate = clockRate - self.description = description - self.mediaStreamId = mediaStreamId - self.mediaStreamName = mediaStreamName - self.mediaStreamType = mediaStreamType - self.videoFormat = videoFormat - } +extension AddFlowSourcesOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case flowArn = "flowArn" + case sources = "sources" } + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) + flowArn = flowArnDecoded + let sourcesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.Source?].self, forKey: .sources) + var sourcesDecoded0:[MediaConnectClientTypes.Source]? = nil + if let sourcesContainer = sourcesContainer { + sourcesDecoded0 = [MediaConnectClientTypes.Source]() + for structure0 in sourcesContainer { + if let structure0 = structure0 { + sourcesDecoded0?.append(structure0) + } + } + } + sources = sourcesDecoded0 + } } -extension MediaConnectClientTypes.AddOutputRequest: Swift.Codable { +extension AddFlowVpcInterfacesInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case cidrAllowList = "cidrAllowList" - case description = "description" - case destination = "destination" - case encryption = "encryption" - case maxLatency = "maxLatency" - case mediaStreamOutputConfigurations = "mediaStreamOutputConfigurations" - case minLatency = "minLatency" - case name = "name" - case port = "port" - case `protocol` = "protocol" - case remoteId = "remoteId" - case senderControlPort = "senderControlPort" - case smoothingLatency = "smoothingLatency" - case streamId = "streamId" - case vpcInterfaceAttachment = "vpcInterfaceAttachment" + case vpcInterfaces = "vpcInterfaces" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let cidrAllowList = cidrAllowList { - var cidrAllowListContainer = encodeContainer.nestedUnkeyedContainer(forKey: .cidrAllowList) - for __string0 in cidrAllowList { - try cidrAllowListContainer.encode(__string0) - } - } - if let description = self.description { - try encodeContainer.encode(description, forKey: .description) - } - if let destination = self.destination { - try encodeContainer.encode(destination, forKey: .destination) - } - if let encryption = self.encryption { - try encodeContainer.encode(encryption, forKey: .encryption) - } - if let maxLatency = self.maxLatency { - try encodeContainer.encode(maxLatency, forKey: .maxLatency) - } - if let mediaStreamOutputConfigurations = mediaStreamOutputConfigurations { - var mediaStreamOutputConfigurationsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .mediaStreamOutputConfigurations) - for mediastreamoutputconfigurationrequest0 in mediaStreamOutputConfigurations { - try mediaStreamOutputConfigurationsContainer.encode(mediastreamoutputconfigurationrequest0) + if let vpcInterfaces = vpcInterfaces { + var vpcInterfacesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .vpcInterfaces) + for vpcinterfacerequest0 in vpcInterfaces { + try vpcInterfacesContainer.encode(vpcinterfacerequest0) } } - if let minLatency = self.minLatency { - try encodeContainer.encode(minLatency, forKey: .minLatency) - } - if let name = self.name { - try encodeContainer.encode(name, forKey: .name) - } - if let port = self.port { - try encodeContainer.encode(port, forKey: .port) - } - if let `protocol` = self.`protocol` { - try encodeContainer.encode(`protocol`.rawValue, forKey: .`protocol`) - } - if let remoteId = self.remoteId { - try encodeContainer.encode(remoteId, forKey: .remoteId) - } - if let senderControlPort = self.senderControlPort { - try encodeContainer.encode(senderControlPort, forKey: .senderControlPort) - } - if let smoothingLatency = self.smoothingLatency { - try encodeContainer.encode(smoothingLatency, forKey: .smoothingLatency) - } - if let streamId = self.streamId { - try encodeContainer.encode(streamId, forKey: .streamId) - } - if let vpcInterfaceAttachment = self.vpcInterfaceAttachment { - try encodeContainer.encode(vpcInterfaceAttachment, forKey: .vpcInterfaceAttachment) - } } +} - public init (from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let cidrAllowListContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .cidrAllowList) - var cidrAllowListDecoded0:[Swift.String]? = nil - if let cidrAllowListContainer = cidrAllowListContainer { - cidrAllowListDecoded0 = [Swift.String]() - for string0 in cidrAllowListContainer { - if let string0 = string0 { - cidrAllowListDecoded0?.append(string0) - } - } +extension AddFlowVpcInterfacesInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let flowArn = flowArn else { + return nil } - cidrAllowList = cidrAllowListDecoded0 - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let destinationDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .destination) - destination = destinationDecoded - let encryptionDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Encryption.self, forKey: .encryption) - encryption = encryptionDecoded - let maxLatencyDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxLatency) - maxLatency = maxLatencyDecoded - let mediaStreamOutputConfigurationsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.MediaStreamOutputConfigurationRequest?].self, forKey: .mediaStreamOutputConfigurations) - var mediaStreamOutputConfigurationsDecoded0:[MediaConnectClientTypes.MediaStreamOutputConfigurationRequest]? = nil - if let mediaStreamOutputConfigurationsContainer = mediaStreamOutputConfigurationsContainer { - mediaStreamOutputConfigurationsDecoded0 = [MediaConnectClientTypes.MediaStreamOutputConfigurationRequest]() - for structure0 in mediaStreamOutputConfigurationsContainer { - if let structure0 = structure0 { - mediaStreamOutputConfigurationsDecoded0?.append(structure0) - } - } - } - mediaStreamOutputConfigurations = mediaStreamOutputConfigurationsDecoded0 - let minLatencyDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .minLatency) - minLatency = minLatencyDecoded - let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) - name = nameDecoded - let portDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .port) - port = portDecoded - let protocolDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ModelProtocol.self, forKey: .protocol) - `protocol` = protocolDecoded - let remoteIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .remoteId) - remoteId = remoteIdDecoded - let senderControlPortDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .senderControlPort) - senderControlPort = senderControlPortDecoded - let smoothingLatencyDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .smoothingLatency) - smoothingLatency = smoothingLatencyDecoded - let streamIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .streamId) - streamId = streamIdDecoded - let vpcInterfaceAttachmentDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.VpcInterfaceAttachment.self, forKey: .vpcInterfaceAttachment) - vpcInterfaceAttachment = vpcInterfaceAttachmentDecoded + return "/v1/flows/\(flowArn.urlPercentEncoding())/vpcInterfaces" } } -extension MediaConnectClientTypes { - /// The output that you want to add to this flow. - public struct AddOutputRequest: Swift.Equatable { - /// The range of IP addresses that should be allowed to initiate output requests to this flow. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16. - public var cidrAllowList: [Swift.String]? - /// A description of the output. This description appears only on the AWS Elemental MediaConnect console and will not be seen by the end user. - public var description: Swift.String? - /// The IP address from which video will be sent to output destinations. - public var destination: Swift.String? - /// The type of key used for the encryption. If no keyType is provided, the service will use the default setting (static-key). - public var encryption: MediaConnectClientTypes.Encryption? - /// The maximum latency in milliseconds. This parameter applies only to RIST-based, Zixi-based, and Fujitsu-based streams. - public var maxLatency: Swift.Int? - /// The media streams that are associated with the output, and the parameters for those associations. - public var mediaStreamOutputConfigurations: [MediaConnectClientTypes.MediaStreamOutputConfigurationRequest]? - /// The minimum latency in milliseconds for SRT-based streams. In streams that use the SRT protocol, this value that you set on your MediaConnect source or output represents the minimal potential latency of that connection. The latency of the stream is set to the highest number between the sender’s minimum latency and the receiver’s minimum latency. - public var minLatency: Swift.Int? - /// The name of the output. This value must be unique within the current flow. - public var name: Swift.String? - /// The port to use when content is distributed to this output. - public var port: Swift.Int? - /// The protocol to use for the output. - /// This member is required. - public var `protocol`: MediaConnectClientTypes.ModelProtocol? - /// The remote ID for the Zixi-pull output stream. - public var remoteId: Swift.String? - /// The port that the flow uses to send outbound requests to initiate connection with the sender. - public var senderControlPort: Swift.Int? - /// The smoothing latency in milliseconds for RIST, RTP, and RTP-FEC streams. - public var smoothingLatency: Swift.Int? - /// The stream ID that you want to use for this transport. This parameter applies only to Zixi-based streams. - public var streamId: Swift.String? - /// The name of the VPC interface attachment to use for this output. - public var vpcInterfaceAttachment: MediaConnectClientTypes.VpcInterfaceAttachment? +/// A request to add VPC interfaces to the flow. +public struct AddFlowVpcInterfacesInput: Swift.Equatable { + /// The flow that you want to mutate. + /// This member is required. + public var flowArn: Swift.String? + /// A list of VPC interfaces that you want to add. + /// This member is required. + public var vpcInterfaces: [MediaConnectClientTypes.VpcInterfaceRequest]? - public init ( - cidrAllowList: [Swift.String]? = nil, - description: Swift.String? = nil, - destination: Swift.String? = nil, - encryption: MediaConnectClientTypes.Encryption? = nil, - maxLatency: Swift.Int? = nil, - mediaStreamOutputConfigurations: [MediaConnectClientTypes.MediaStreamOutputConfigurationRequest]? = nil, - minLatency: Swift.Int? = nil, - name: Swift.String? = nil, - port: Swift.Int? = nil, - `protocol`: MediaConnectClientTypes.ModelProtocol? = nil, - remoteId: Swift.String? = nil, - senderControlPort: Swift.Int? = nil, - smoothingLatency: Swift.Int? = nil, - streamId: Swift.String? = nil, - vpcInterfaceAttachment: MediaConnectClientTypes.VpcInterfaceAttachment? = nil - ) - { - self.cidrAllowList = cidrAllowList - self.description = description - self.destination = destination - self.encryption = encryption - self.maxLatency = maxLatency - self.mediaStreamOutputConfigurations = mediaStreamOutputConfigurations - self.minLatency = minLatency - self.name = name - self.port = port - self.`protocol` = `protocol` - self.remoteId = remoteId - self.senderControlPort = senderControlPort - self.smoothingLatency = smoothingLatency - self.streamId = streamId - self.vpcInterfaceAttachment = vpcInterfaceAttachment - } + public init ( + flowArn: Swift.String? = nil, + vpcInterfaces: [MediaConnectClientTypes.VpcInterfaceRequest]? = nil + ) + { + self.flowArn = flowArn + self.vpcInterfaces = vpcInterfaces } +} +struct AddFlowVpcInterfacesInputBody: Swift.Equatable { + let vpcInterfaces: [MediaConnectClientTypes.VpcInterfaceRequest]? } -extension MediaConnectClientTypes { - public enum Algorithm: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case aes128 - case aes192 - case aes256 - case sdkUnknown(Swift.String) +extension AddFlowVpcInterfacesInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case vpcInterfaces = "vpcInterfaces" + } - public static var allCases: [Algorithm] { - return [ - .aes128, - .aes192, - .aes256, - .sdkUnknown("") - ] - } - 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 .aes128: return "aes128" - case .aes192: return "aes192" - case .aes256: return "aes256" - case let .sdkUnknown(s): return s + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let vpcInterfacesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.VpcInterfaceRequest?].self, forKey: .vpcInterfaces) + var vpcInterfacesDecoded0:[MediaConnectClientTypes.VpcInterfaceRequest]? = nil + if let vpcInterfacesContainer = vpcInterfacesContainer { + vpcInterfacesDecoded0 = [MediaConnectClientTypes.VpcInterfaceRequest]() + for structure0 in vpcInterfacesContainer { + if let structure0 = structure0 { + vpcInterfacesDecoded0?.append(structure0) + } } } - public init(from decoder: Swift.Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(RawValue.self) - self = Algorithm(rawValue: rawValue) ?? Algorithm.sdkUnknown(rawValue) + vpcInterfaces = vpcInterfacesDecoded0 + } +} + +extension AddFlowVpcInterfacesOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} + +extension AddFlowVpcInterfacesOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) } } } -extension BadRequestException { - public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { +public enum AddFlowVpcInterfacesOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case forbiddenException(ForbiddenException) + case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) +} + +extension AddFlowVpcInterfacesOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { if case .stream(let reader) = httpResponse.body, let responseDecoder = decoder { let data = reader.toBytes().getData() - let output: BadRequestExceptionBody = try responseDecoder.decode(responseBody: data) - self.message = output.message + let output: AddFlowVpcInterfacesOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.flowArn = output.flowArn + self.vpcInterfaces = output.vpcInterfaces } else { - self.message = nil + self.flowArn = nil + self.vpcInterfaces = nil } - self._headers = httpResponse.headers - self._statusCode = httpResponse.statusCode - self._requestID = requestID - self._message = message } } -/// Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception. -public struct BadRequestException: AWSClientRuntime.AWSHttpServiceError, Swift.Equatable { - public var _headers: ClientRuntime.Headers? - public var _statusCode: ClientRuntime.HttpStatusCode? - public var _message: Swift.String? - public var _requestID: Swift.String? - public var _retryable: Swift.Bool = false - public var _isThrottling: Swift.Bool = false - public var _type: ClientRuntime.ErrorType = .client - /// The error message returned by AWS Elemental MediaConnect. - /// This member is required. - public var message: Swift.String? +public struct AddFlowVpcInterfacesOutputResponse: Swift.Equatable { + /// The ARN of the flow that these VPC interfaces were added to. + public var flowArn: Swift.String? + /// The details of the newly added VPC interfaces. + public var vpcInterfaces: [MediaConnectClientTypes.VpcInterface]? public init ( - message: Swift.String? = nil + flowArn: Swift.String? = nil, + vpcInterfaces: [MediaConnectClientTypes.VpcInterface]? = nil ) { - self.message = message + self.flowArn = flowArn + self.vpcInterfaces = vpcInterfaces } } -struct BadRequestExceptionBody: Swift.Equatable { - let message: Swift.String? +struct AddFlowVpcInterfacesOutputResponseBody: Swift.Equatable { + let flowArn: Swift.String? + let vpcInterfaces: [MediaConnectClientTypes.VpcInterface]? } -extension BadRequestExceptionBody: Swift.Decodable { +extension AddFlowVpcInterfacesOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case message = "message" + case flowArn = "flowArn" + case vpcInterfaces = "vpcInterfaces" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) - message = messageDecoded + let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) + flowArn = flowArnDecoded + let vpcInterfacesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.VpcInterface?].self, forKey: .vpcInterfaces) + var vpcInterfacesDecoded0:[MediaConnectClientTypes.VpcInterface]? = nil + if let vpcInterfacesContainer = vpcInterfacesContainer { + vpcInterfacesDecoded0 = [MediaConnectClientTypes.VpcInterface]() + for structure0 in vpcInterfacesContainer { + if let structure0 = structure0 { + vpcInterfacesDecoded0?.append(structure0) + } + } + } + vpcInterfaces = vpcInterfacesDecoded0 } } -extension MediaConnectClientTypes { - public enum Colorimetry: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case bt2020 - case bt2100 - case bt601 - case bt709 - case st20651 - case st20653 - case xyz - case sdkUnknown(Swift.String) +extension MediaConnectClientTypes.AddIngressGatewayBridgeRequest: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case maxBitrate = "maxBitrate" + case maxOutputs = "maxOutputs" + } - public static var allCases: [Colorimetry] { - return [ - .bt2020, - .bt2100, - .bt601, - .bt709, - .st20651, - .st20653, - .xyz, - .sdkUnknown("") - ] - } - 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 .bt2020: return "BT2020" - case .bt2100: return "BT2100" - case .bt601: return "BT601" - case .bt709: return "BT709" - case .st20651: return "ST2065-1" - case .st20653: return "ST2065-3" - case .xyz: return "XYZ" - case let .sdkUnknown(s): return s - } + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let maxBitrate = self.maxBitrate { + try encodeContainer.encode(maxBitrate, forKey: .maxBitrate) } - public init(from decoder: Swift.Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(RawValue.self) - self = Colorimetry(rawValue: rawValue) ?? Colorimetry.sdkUnknown(rawValue) + if let maxOutputs = self.maxOutputs { + try encodeContainer.encode(maxOutputs, forKey: .maxOutputs) } } -} -extension CreateFlow420Exception { - public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { - if case .stream(let reader) = httpResponse.body, - let responseDecoder = decoder { - let data = reader.toBytes().getData() - let output: CreateFlow420ExceptionBody = try responseDecoder.decode(responseBody: data) - self.message = output.message - } else { - self.message = nil - } - self._headers = httpResponse.headers - self._statusCode = httpResponse.statusCode - self._requestID = requestID - self._message = message + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let maxBitrateDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxBitrate) + maxBitrate = maxBitrateDecoded + let maxOutputsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxOutputs) + maxOutputs = maxOutputsDecoded } } -/// Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception. -public struct CreateFlow420Exception: AWSClientRuntime.AWSHttpServiceError, Swift.Equatable { - public var _headers: ClientRuntime.Headers? - public var _statusCode: ClientRuntime.HttpStatusCode? - public var _message: Swift.String? - public var _requestID: Swift.String? - public var _retryable: Swift.Bool = false - public var _isThrottling: Swift.Bool = false - public var _type: ClientRuntime.ErrorType = .client - /// The error message returned by AWS Elemental MediaConnect. - /// This member is required. - public var message: Swift.String? +extension MediaConnectClientTypes { + public struct AddIngressGatewayBridgeRequest: Swift.Equatable { + /// The maximum expected bitrate (in bps). + /// This member is required. + public var maxBitrate: Swift.Int? + /// The maximum number of expected outputs. + /// This member is required. + public var maxOutputs: Swift.Int? - public init ( - message: Swift.String? = nil - ) - { - self.message = message + public init ( + maxBitrate: Swift.Int? = nil, + maxOutputs: Swift.Int? = nil + ) + { + self.maxBitrate = maxBitrate + self.maxOutputs = maxOutputs + } } -} -struct CreateFlow420ExceptionBody: Swift.Equatable { - let message: Swift.String? } -extension CreateFlow420ExceptionBody: Swift.Decodable { +extension MediaConnectClientTypes.AddMaintenance: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case message = "message" + case maintenanceDay = "maintenanceDay" + case maintenanceStartHour = "maintenanceStartHour" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let maintenanceDay = self.maintenanceDay { + try encodeContainer.encode(maintenanceDay.rawValue, forKey: .maintenanceDay) + } + if let maintenanceStartHour = self.maintenanceStartHour { + try encodeContainer.encode(maintenanceStartHour, forKey: .maintenanceStartHour) + } } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) - message = messageDecoded + let maintenanceDayDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.MaintenanceDay.self, forKey: .maintenanceDay) + maintenanceDay = maintenanceDayDecoded + let maintenanceStartHourDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .maintenanceStartHour) + maintenanceStartHour = maintenanceStartHourDecoded } } -extension CreateFlowInput: Swift.Encodable { +extension MediaConnectClientTypes { + /// Create maintenance setting for a flow + public struct AddMaintenance: Swift.Equatable { + /// A day of a week when the maintenance will happen. Use Monday/Tuesday/Wednesday/Thursday/Friday/Saturday/Sunday. + /// This member is required. + public var maintenanceDay: MediaConnectClientTypes.MaintenanceDay? + /// UTC time when the maintenance will happen. Use 24-hour HH:MM format. Minutes must be 00. Example: 13:00. The default value is 02:00. + /// This member is required. + public var maintenanceStartHour: Swift.String? + + public init ( + maintenanceDay: MediaConnectClientTypes.MaintenanceDay? = nil, + maintenanceStartHour: Swift.String? = nil + ) + { + self.maintenanceDay = maintenanceDay + self.maintenanceStartHour = maintenanceStartHour + } + } + +} + +extension MediaConnectClientTypes.AddMediaStreamRequest: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case availabilityZone = "availabilityZone" - case entitlements = "entitlements" - case maintenance = "maintenance" - case mediaStreams = "mediaStreams" - case name = "name" - case outputs = "outputs" - case source = "source" - case sourceFailoverConfig = "sourceFailoverConfig" - case sources = "sources" - case vpcInterfaces = "vpcInterfaces" + case attributes = "attributes" + case clockRate = "clockRate" + case description = "description" + case mediaStreamId = "mediaStreamId" + case mediaStreamName = "mediaStreamName" + case mediaStreamType = "mediaStreamType" + case videoFormat = "videoFormat" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let availabilityZone = self.availabilityZone { - try encodeContainer.encode(availabilityZone, forKey: .availabilityZone) - } - if let entitlements = entitlements { - var entitlementsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .entitlements) - for grantentitlementrequest0 in entitlements { - try entitlementsContainer.encode(grantentitlementrequest0) - } - } - if let maintenance = self.maintenance { - try encodeContainer.encode(maintenance, forKey: .maintenance) - } - if let mediaStreams = mediaStreams { - var mediaStreamsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .mediaStreams) - for addmediastreamrequest0 in mediaStreams { - try mediaStreamsContainer.encode(addmediastreamrequest0) - } + if let attributes = self.attributes { + try encodeContainer.encode(attributes, forKey: .attributes) } - if let name = self.name { - try encodeContainer.encode(name, forKey: .name) + if let clockRate = self.clockRate { + try encodeContainer.encode(clockRate, forKey: .clockRate) } - if let outputs = outputs { - var outputsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .outputs) - for addoutputrequest0 in outputs { - try outputsContainer.encode(addoutputrequest0) - } + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) } - if let source = self.source { - try encodeContainer.encode(source, forKey: .source) + if let mediaStreamId = self.mediaStreamId { + try encodeContainer.encode(mediaStreamId, forKey: .mediaStreamId) } - if let sourceFailoverConfig = self.sourceFailoverConfig { - try encodeContainer.encode(sourceFailoverConfig, forKey: .sourceFailoverConfig) + if let mediaStreamName = self.mediaStreamName { + try encodeContainer.encode(mediaStreamName, forKey: .mediaStreamName) } - if let sources = sources { - var sourcesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .sources) - for setsourcerequest0 in sources { - try sourcesContainer.encode(setsourcerequest0) - } + if let mediaStreamType = self.mediaStreamType { + try encodeContainer.encode(mediaStreamType.rawValue, forKey: .mediaStreamType) } - if let vpcInterfaces = vpcInterfaces { - var vpcInterfacesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .vpcInterfaces) - for vpcinterfacerequest0 in vpcInterfaces { - try vpcInterfacesContainer.encode(vpcinterfacerequest0) - } + if let videoFormat = self.videoFormat { + try encodeContainer.encode(videoFormat, forKey: .videoFormat) } } -} -extension CreateFlowInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - return "/v1/flows" + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let attributesDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.MediaStreamAttributesRequest.self, forKey: .attributes) + attributes = attributesDecoded + let clockRateDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .clockRate) + clockRate = clockRateDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let mediaStreamIdDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .mediaStreamId) + mediaStreamId = mediaStreamIdDecoded + let mediaStreamNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .mediaStreamName) + mediaStreamName = mediaStreamNameDecoded + let mediaStreamTypeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.MediaStreamType.self, forKey: .mediaStreamType) + mediaStreamType = mediaStreamTypeDecoded + let videoFormatDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .videoFormat) + videoFormat = videoFormatDecoded } } -/// Creates a new flow. The request must include one source. The request optionally can include outputs (up to 50) and entitlements (up to 50). -public struct CreateFlowInput: Swift.Equatable { - /// The Availability Zone that you want to create the flow in. These options are limited to the Availability Zones within the current AWS Region. - public var availabilityZone: Swift.String? - /// The entitlements that you want to grant on a flow. - public var entitlements: [MediaConnectClientTypes.GrantEntitlementRequest]? - /// Create maintenance setting for a flow - public var maintenance: MediaConnectClientTypes.AddMaintenance? - /// The media streams that you want to add to the flow. You can associate these media streams with sources and outputs on the flow. - public var mediaStreams: [MediaConnectClientTypes.AddMediaStreamRequest]? - /// The name of the flow. - /// This member is required. - public var name: Swift.String? - /// The outputs that you want to add to this flow. - public var outputs: [MediaConnectClientTypes.AddOutputRequest]? - /// The settings for the source of the flow. - public var source: MediaConnectClientTypes.SetSourceRequest? - /// The settings for source failover. - public var sourceFailoverConfig: MediaConnectClientTypes.FailoverConfig? - public var sources: [MediaConnectClientTypes.SetSourceRequest]? - /// The VPC interfaces you want on the flow. - public var vpcInterfaces: [MediaConnectClientTypes.VpcInterfaceRequest]? - - public init ( - availabilityZone: Swift.String? = nil, - entitlements: [MediaConnectClientTypes.GrantEntitlementRequest]? = nil, - maintenance: MediaConnectClientTypes.AddMaintenance? = nil, - mediaStreams: [MediaConnectClientTypes.AddMediaStreamRequest]? = nil, - name: Swift.String? = nil, - outputs: [MediaConnectClientTypes.AddOutputRequest]? = nil, - source: MediaConnectClientTypes.SetSourceRequest? = nil, - sourceFailoverConfig: MediaConnectClientTypes.FailoverConfig? = nil, - sources: [MediaConnectClientTypes.SetSourceRequest]? = nil, - vpcInterfaces: [MediaConnectClientTypes.VpcInterfaceRequest]? = nil - ) - { - self.availabilityZone = availabilityZone - self.entitlements = entitlements - self.maintenance = maintenance - self.mediaStreams = mediaStreams - self.name = name - self.outputs = outputs - self.source = source - self.sourceFailoverConfig = sourceFailoverConfig - self.sources = sources - self.vpcInterfaces = vpcInterfaces +extension MediaConnectClientTypes { + /// The media stream that you want to add to the flow. + public struct AddMediaStreamRequest: Swift.Equatable { + /// The attributes that you want to assign to the new media stream. + public var attributes: MediaConnectClientTypes.MediaStreamAttributesRequest? + /// The sample rate (in Hz) for the stream. If the media stream type is video or ancillary data, set this value to 90000. If the media stream type is audio, set this value to either 48000 or 96000. + public var clockRate: Swift.Int? + /// A description that can help you quickly identify what your media stream is used for. + public var description: Swift.String? + /// A unique identifier for the media stream. + /// This member is required. + public var mediaStreamId: Swift.Int? + /// A name that helps you distinguish one media stream from another. + /// This member is required. + public var mediaStreamName: Swift.String? + /// The type of media stream. + /// This member is required. + public var mediaStreamType: MediaConnectClientTypes.MediaStreamType? + /// The resolution of the video. + public var videoFormat: Swift.String? + + public init ( + attributes: MediaConnectClientTypes.MediaStreamAttributesRequest? = nil, + clockRate: Swift.Int? = nil, + description: Swift.String? = nil, + mediaStreamId: Swift.Int? = nil, + mediaStreamName: Swift.String? = nil, + mediaStreamType: MediaConnectClientTypes.MediaStreamType? = nil, + videoFormat: Swift.String? = nil + ) + { + self.attributes = attributes + self.clockRate = clockRate + self.description = description + self.mediaStreamId = mediaStreamId + self.mediaStreamName = mediaStreamName + self.mediaStreamType = mediaStreamType + self.videoFormat = videoFormat + } } -} -struct CreateFlowInputBody: Swift.Equatable { - let availabilityZone: Swift.String? - let entitlements: [MediaConnectClientTypes.GrantEntitlementRequest]? - let mediaStreams: [MediaConnectClientTypes.AddMediaStreamRequest]? - let name: Swift.String? - let outputs: [MediaConnectClientTypes.AddOutputRequest]? - let source: MediaConnectClientTypes.SetSourceRequest? - let sourceFailoverConfig: MediaConnectClientTypes.FailoverConfig? - let sources: [MediaConnectClientTypes.SetSourceRequest]? - let vpcInterfaces: [MediaConnectClientTypes.VpcInterfaceRequest]? - let maintenance: MediaConnectClientTypes.AddMaintenance? } -extension CreateFlowInputBody: Swift.Decodable { +extension MediaConnectClientTypes.AddOutputRequest: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case availabilityZone = "availabilityZone" - case entitlements = "entitlements" - case maintenance = "maintenance" - case mediaStreams = "mediaStreams" + case cidrAllowList = "cidrAllowList" + case description = "description" + case destination = "destination" + case encryption = "encryption" + case maxLatency = "maxLatency" + case mediaStreamOutputConfigurations = "mediaStreamOutputConfigurations" + case minLatency = "minLatency" case name = "name" - case outputs = "outputs" - case source = "source" - case sourceFailoverConfig = "sourceFailoverConfig" - case sources = "sources" - case vpcInterfaces = "vpcInterfaces" + case port = "port" + case `protocol` = "protocol" + case remoteId = "remoteId" + case senderControlPort = "senderControlPort" + case smoothingLatency = "smoothingLatency" + case streamId = "streamId" + case vpcInterfaceAttachment = "vpcInterfaceAttachment" } - public init (from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let availabilityZoneDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .availabilityZone) - availabilityZone = availabilityZoneDecoded - let entitlementsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.GrantEntitlementRequest?].self, forKey: .entitlements) - var entitlementsDecoded0:[MediaConnectClientTypes.GrantEntitlementRequest]? = nil - if let entitlementsContainer = entitlementsContainer { - entitlementsDecoded0 = [MediaConnectClientTypes.GrantEntitlementRequest]() - for structure0 in entitlementsContainer { - if let structure0 = structure0 { - entitlementsDecoded0?.append(structure0) - } + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let cidrAllowList = cidrAllowList { + var cidrAllowListContainer = encodeContainer.nestedUnkeyedContainer(forKey: .cidrAllowList) + for __string0 in cidrAllowList { + try cidrAllowListContainer.encode(__string0) } } - entitlements = entitlementsDecoded0 - let mediaStreamsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.AddMediaStreamRequest?].self, forKey: .mediaStreams) - var mediaStreamsDecoded0:[MediaConnectClientTypes.AddMediaStreamRequest]? = nil - if let mediaStreamsContainer = mediaStreamsContainer { - mediaStreamsDecoded0 = [MediaConnectClientTypes.AddMediaStreamRequest]() - for structure0 in mediaStreamsContainer { - if let structure0 = structure0 { - mediaStreamsDecoded0?.append(structure0) - } - } + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) } - mediaStreams = mediaStreamsDecoded0 - let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) - name = nameDecoded - let outputsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.AddOutputRequest?].self, forKey: .outputs) - var outputsDecoded0:[MediaConnectClientTypes.AddOutputRequest]? = nil - if let outputsContainer = outputsContainer { - outputsDecoded0 = [MediaConnectClientTypes.AddOutputRequest]() - for structure0 in outputsContainer { - if let structure0 = structure0 { - outputsDecoded0?.append(structure0) - } + if let destination = self.destination { + try encodeContainer.encode(destination, forKey: .destination) + } + if let encryption = self.encryption { + try encodeContainer.encode(encryption, forKey: .encryption) + } + if let maxLatency = self.maxLatency { + try encodeContainer.encode(maxLatency, forKey: .maxLatency) + } + if let mediaStreamOutputConfigurations = mediaStreamOutputConfigurations { + var mediaStreamOutputConfigurationsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .mediaStreamOutputConfigurations) + for mediastreamoutputconfigurationrequest0 in mediaStreamOutputConfigurations { + try mediaStreamOutputConfigurationsContainer.encode(mediastreamoutputconfigurationrequest0) } } - outputs = outputsDecoded0 - let sourceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.SetSourceRequest.self, forKey: .source) - source = sourceDecoded - let sourceFailoverConfigDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.FailoverConfig.self, forKey: .sourceFailoverConfig) - sourceFailoverConfig = sourceFailoverConfigDecoded - let sourcesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.SetSourceRequest?].self, forKey: .sources) - var sourcesDecoded0:[MediaConnectClientTypes.SetSourceRequest]? = nil - if let sourcesContainer = sourcesContainer { - sourcesDecoded0 = [MediaConnectClientTypes.SetSourceRequest]() - for structure0 in sourcesContainer { - if let structure0 = structure0 { - sourcesDecoded0?.append(structure0) + if let minLatency = self.minLatency { + try encodeContainer.encode(minLatency, forKey: .minLatency) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let port = self.port { + try encodeContainer.encode(port, forKey: .port) + } + if let `protocol` = self.`protocol` { + try encodeContainer.encode(`protocol`.rawValue, forKey: .`protocol`) + } + if let remoteId = self.remoteId { + try encodeContainer.encode(remoteId, forKey: .remoteId) + } + if let senderControlPort = self.senderControlPort { + try encodeContainer.encode(senderControlPort, forKey: .senderControlPort) + } + if let smoothingLatency = self.smoothingLatency { + try encodeContainer.encode(smoothingLatency, forKey: .smoothingLatency) + } + if let streamId = self.streamId { + try encodeContainer.encode(streamId, forKey: .streamId) + } + if let vpcInterfaceAttachment = self.vpcInterfaceAttachment { + try encodeContainer.encode(vpcInterfaceAttachment, forKey: .vpcInterfaceAttachment) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let cidrAllowListContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .cidrAllowList) + var cidrAllowListDecoded0:[Swift.String]? = nil + if let cidrAllowListContainer = cidrAllowListContainer { + cidrAllowListDecoded0 = [Swift.String]() + for string0 in cidrAllowListContainer { + if let string0 = string0 { + cidrAllowListDecoded0?.append(string0) } } } - sources = sourcesDecoded0 - let vpcInterfacesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.VpcInterfaceRequest?].self, forKey: .vpcInterfaces) - var vpcInterfacesDecoded0:[MediaConnectClientTypes.VpcInterfaceRequest]? = nil - if let vpcInterfacesContainer = vpcInterfacesContainer { - vpcInterfacesDecoded0 = [MediaConnectClientTypes.VpcInterfaceRequest]() - for structure0 in vpcInterfacesContainer { + cidrAllowList = cidrAllowListDecoded0 + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let destinationDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .destination) + destination = destinationDecoded + let encryptionDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Encryption.self, forKey: .encryption) + encryption = encryptionDecoded + let maxLatencyDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxLatency) + maxLatency = maxLatencyDecoded + let mediaStreamOutputConfigurationsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.MediaStreamOutputConfigurationRequest?].self, forKey: .mediaStreamOutputConfigurations) + var mediaStreamOutputConfigurationsDecoded0:[MediaConnectClientTypes.MediaStreamOutputConfigurationRequest]? = nil + if let mediaStreamOutputConfigurationsContainer = mediaStreamOutputConfigurationsContainer { + mediaStreamOutputConfigurationsDecoded0 = [MediaConnectClientTypes.MediaStreamOutputConfigurationRequest]() + for structure0 in mediaStreamOutputConfigurationsContainer { if let structure0 = structure0 { - vpcInterfacesDecoded0?.append(structure0) + mediaStreamOutputConfigurationsDecoded0?.append(structure0) } } } - vpcInterfaces = vpcInterfacesDecoded0 - let maintenanceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.AddMaintenance.self, forKey: .maintenance) - maintenance = maintenanceDecoded - } -} - -extension CreateFlowOutputError: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { - let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) - try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + mediaStreamOutputConfigurations = mediaStreamOutputConfigurationsDecoded0 + let minLatencyDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .minLatency) + minLatency = minLatencyDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let portDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .port) + port = portDecoded + let protocolDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ModelProtocol.self, forKey: .protocol) + `protocol` = protocolDecoded + let remoteIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .remoteId) + remoteId = remoteIdDecoded + let senderControlPortDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .senderControlPort) + senderControlPort = senderControlPortDecoded + let smoothingLatencyDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .smoothingLatency) + smoothingLatency = smoothingLatencyDecoded + let streamIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .streamId) + streamId = streamIdDecoded + let vpcInterfaceAttachmentDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.VpcInterfaceAttachment.self, forKey: .vpcInterfaceAttachment) + vpcInterfaceAttachment = vpcInterfaceAttachmentDecoded } } -extension CreateFlowOutputError { - public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { - switch errorType { - case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "CreateFlow420Exception" : self = .createFlow420Exception(try CreateFlow420Exception(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) +extension MediaConnectClientTypes { + /// The output that you want to add to this flow. + public struct AddOutputRequest: Swift.Equatable { + /// The range of IP addresses that should be allowed to initiate output requests to this flow. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16. + public var cidrAllowList: [Swift.String]? + /// A description of the output. This description appears only on the AWS Elemental MediaConnect console and will not be seen by the end user. + public var description: Swift.String? + /// The IP address from which video will be sent to output destinations. + public var destination: Swift.String? + /// The type of key used for the encryption. If no keyType is provided, the service will use the default setting (static-key). Allowable encryption types: static-key. + public var encryption: MediaConnectClientTypes.Encryption? + /// The maximum latency in milliseconds. This parameter applies only to RIST-based, Zixi-based, and Fujitsu-based streams. + public var maxLatency: Swift.Int? + /// The media streams that are associated with the output, and the parameters for those associations. + public var mediaStreamOutputConfigurations: [MediaConnectClientTypes.MediaStreamOutputConfigurationRequest]? + /// The minimum latency in milliseconds for SRT-based streams. In streams that use the SRT protocol, this value that you set on your MediaConnect source or output represents the minimal potential latency of that connection. The latency of the stream is set to the highest number between the sender’s minimum latency and the receiver’s minimum latency. + public var minLatency: Swift.Int? + /// The name of the output. This value must be unique within the current flow. + public var name: Swift.String? + /// The port to use when content is distributed to this output. + public var port: Swift.Int? + /// The protocol to use for the output. + /// This member is required. + public var `protocol`: MediaConnectClientTypes.ModelProtocol? + /// The remote ID for the Zixi-pull output stream. + public var remoteId: Swift.String? + /// The port that the flow uses to send outbound requests to initiate connection with the sender. + public var senderControlPort: Swift.Int? + /// The smoothing latency in milliseconds for RIST, RTP, and RTP-FEC streams. + public var smoothingLatency: Swift.Int? + /// The stream ID that you want to use for this transport. This parameter applies only to Zixi and SRT caller-based streams. + public var streamId: Swift.String? + /// The name of the VPC interface attachment to use for this output. + public var vpcInterfaceAttachment: MediaConnectClientTypes.VpcInterfaceAttachment? + + public init ( + cidrAllowList: [Swift.String]? = nil, + description: Swift.String? = nil, + destination: Swift.String? = nil, + encryption: MediaConnectClientTypes.Encryption? = nil, + maxLatency: Swift.Int? = nil, + mediaStreamOutputConfigurations: [MediaConnectClientTypes.MediaStreamOutputConfigurationRequest]? = nil, + minLatency: Swift.Int? = nil, + name: Swift.String? = nil, + port: Swift.Int? = nil, + `protocol`: MediaConnectClientTypes.ModelProtocol? = nil, + remoteId: Swift.String? = nil, + senderControlPort: Swift.Int? = nil, + smoothingLatency: Swift.Int? = nil, + streamId: Swift.String? = nil, + vpcInterfaceAttachment: MediaConnectClientTypes.VpcInterfaceAttachment? = nil + ) + { + self.cidrAllowList = cidrAllowList + self.description = description + self.destination = destination + self.encryption = encryption + self.maxLatency = maxLatency + self.mediaStreamOutputConfigurations = mediaStreamOutputConfigurations + self.minLatency = minLatency + self.name = name + self.port = port + self.`protocol` = `protocol` + self.remoteId = remoteId + self.senderControlPort = senderControlPort + self.smoothingLatency = smoothingLatency + self.streamId = streamId + self.vpcInterfaceAttachment = vpcInterfaceAttachment } } + } -public enum CreateFlowOutputError: Swift.Error, Swift.Equatable { - case badRequestException(BadRequestException) - case createFlow420Exception(CreateFlow420Exception) - case forbiddenException(ForbiddenException) - case internalServerErrorException(InternalServerErrorException) - case serviceUnavailableException(ServiceUnavailableException) - case tooManyRequestsException(TooManyRequestsException) - case unknown(UnknownAWSHttpServiceError) +extension MediaConnectClientTypes { + public enum Algorithm: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case aes128 + case aes192 + case aes256 + case sdkUnknown(Swift.String) + + public static var allCases: [Algorithm] { + return [ + .aes128, + .aes192, + .aes256, + .sdkUnknown("") + ] + } + 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 .aes128: return "aes128" + case .aes192: return "aes192" + case .aes256: return "aes256" + case let .sdkUnknown(s): return s + } + } + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = Algorithm(rawValue: rawValue) ?? Algorithm.sdkUnknown(rawValue) + } + } } -extension CreateFlowOutputResponse: ClientRuntime.HttpResponseBinding { - public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { +extension BadRequestException { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { if case .stream(let reader) = httpResponse.body, let responseDecoder = decoder { let data = reader.toBytes().getData() - let output: CreateFlowOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.flow = output.flow + let output: BadRequestExceptionBody = try responseDecoder.decode(responseBody: data) + self.message = output.message } else { - self.flow = nil + self.message = nil } + self._headers = httpResponse.headers + self._statusCode = httpResponse.statusCode + self._requestID = requestID + self._message = message } } -public struct CreateFlowOutputResponse: Swift.Equatable { - /// The settings for a flow, including its source, outputs, and entitlements. - public var flow: MediaConnectClientTypes.Flow? +/// Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception. +public struct BadRequestException: AWSClientRuntime.AWSHttpServiceError, Swift.Equatable { + public var _headers: ClientRuntime.Headers? + public var _statusCode: ClientRuntime.HttpStatusCode? + public var _message: Swift.String? + public var _requestID: Swift.String? + public var _retryable: Swift.Bool = false + public var _isThrottling: Swift.Bool = false + public var _type: ClientRuntime.ErrorType = .client + /// The error message returned by AWS Elemental MediaConnect. + /// This member is required. + public var message: Swift.String? public init ( - flow: MediaConnectClientTypes.Flow? = nil + message: Swift.String? = nil ) { - self.flow = flow + self.message = message } } -struct CreateFlowOutputResponseBody: Swift.Equatable { - let flow: MediaConnectClientTypes.Flow? +struct BadRequestExceptionBody: Swift.Equatable { + let message: Swift.String? } -extension CreateFlowOutputResponseBody: Swift.Decodable { +extension BadRequestExceptionBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case flow = "flow" + case message = "message" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let flowDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Flow.self, forKey: .flow) - flow = flowDecoded + let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) + message = messageDecoded } } -extension DeleteFlowInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let flowArn = flowArn else { - return nil - } - return "/v1/flows/\(flowArn.urlPercentEncoding())" +extension MediaConnectClientTypes.Bridge: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case bridgeArn = "bridgeArn" + case bridgeMessages = "bridgeMessages" + case bridgeState = "bridgeState" + case egressGatewayBridge = "egressGatewayBridge" + case ingressGatewayBridge = "ingressGatewayBridge" + case name = "name" + case outputs = "outputs" + case placementArn = "placementArn" + case sourceFailoverConfig = "sourceFailoverConfig" + case sources = "sources" } -} - -public struct DeleteFlowInput: Swift.Equatable { - /// The ARN of the flow that you want to delete. - /// This member is required. - public var flowArn: Swift.String? - public init ( - flowArn: Swift.String? = nil - ) - { - self.flowArn = flowArn + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let bridgeArn = self.bridgeArn { + try encodeContainer.encode(bridgeArn, forKey: .bridgeArn) + } + if let bridgeMessages = bridgeMessages { + var bridgeMessagesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .bridgeMessages) + for messagedetail0 in bridgeMessages { + try bridgeMessagesContainer.encode(messagedetail0) + } + } + if let bridgeState = self.bridgeState { + try encodeContainer.encode(bridgeState.rawValue, forKey: .bridgeState) + } + if let egressGatewayBridge = self.egressGatewayBridge { + try encodeContainer.encode(egressGatewayBridge, forKey: .egressGatewayBridge) + } + if let ingressGatewayBridge = self.ingressGatewayBridge { + try encodeContainer.encode(ingressGatewayBridge, forKey: .ingressGatewayBridge) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let outputs = outputs { + var outputsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .outputs) + for bridgeoutput0 in outputs { + try outputsContainer.encode(bridgeoutput0) + } + } + if let placementArn = self.placementArn { + try encodeContainer.encode(placementArn, forKey: .placementArn) + } + if let sourceFailoverConfig = self.sourceFailoverConfig { + try encodeContainer.encode(sourceFailoverConfig, forKey: .sourceFailoverConfig) + } + if let sources = sources { + var sourcesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .sources) + for bridgesource0 in sources { + try sourcesContainer.encode(bridgesource0) + } + } } -} - -struct DeleteFlowInputBody: Swift.Equatable { -} - -extension DeleteFlowInputBody: Swift.Decodable { public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let bridgeArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .bridgeArn) + bridgeArn = bridgeArnDecoded + let bridgeMessagesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.MessageDetail?].self, forKey: .bridgeMessages) + var bridgeMessagesDecoded0:[MediaConnectClientTypes.MessageDetail]? = nil + if let bridgeMessagesContainer = bridgeMessagesContainer { + bridgeMessagesDecoded0 = [MediaConnectClientTypes.MessageDetail]() + for structure0 in bridgeMessagesContainer { + if let structure0 = structure0 { + bridgeMessagesDecoded0?.append(structure0) + } + } + } + bridgeMessages = bridgeMessagesDecoded0 + let bridgeStateDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.BridgeState.self, forKey: .bridgeState) + bridgeState = bridgeStateDecoded + let egressGatewayBridgeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.EgressGatewayBridge.self, forKey: .egressGatewayBridge) + egressGatewayBridge = egressGatewayBridgeDecoded + let ingressGatewayBridgeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.IngressGatewayBridge.self, forKey: .ingressGatewayBridge) + ingressGatewayBridge = ingressGatewayBridgeDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let outputsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.BridgeOutput?].self, forKey: .outputs) + var outputsDecoded0:[MediaConnectClientTypes.BridgeOutput]? = nil + if let outputsContainer = outputsContainer { + outputsDecoded0 = [MediaConnectClientTypes.BridgeOutput]() + for structure0 in outputsContainer { + if let structure0 = structure0 { + outputsDecoded0?.append(structure0) + } + } + } + outputs = outputsDecoded0 + let placementArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .placementArn) + placementArn = placementArnDecoded + let sourceFailoverConfigDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.FailoverConfig.self, forKey: .sourceFailoverConfig) + sourceFailoverConfig = sourceFailoverConfigDecoded + let sourcesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.BridgeSource?].self, forKey: .sources) + var sourcesDecoded0:[MediaConnectClientTypes.BridgeSource]? = nil + if let sourcesContainer = sourcesContainer { + sourcesDecoded0 = [MediaConnectClientTypes.BridgeSource]() + for structure0 in sourcesContainer { + if let structure0 = structure0 { + sourcesDecoded0?.append(structure0) + } + } + } + sources = sourcesDecoded0 } } -extension DeleteFlowOutputError: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { - let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) - try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) +extension MediaConnectClientTypes { + /// A Bridge is the connection between your datacenter's Instances and the AWS cloud. A bridge can be used to send video from the AWS cloud to your datacenter or from your datacenter to the AWS cloud. + public struct Bridge: Swift.Equatable { + /// The Amazon Resource Number (ARN) of the bridge. + /// This member is required. + public var bridgeArn: Swift.String? + public var bridgeMessages: [MediaConnectClientTypes.MessageDetail]? + /// This member is required. + public var bridgeState: MediaConnectClientTypes.BridgeState? + public var egressGatewayBridge: MediaConnectClientTypes.EgressGatewayBridge? + public var ingressGatewayBridge: MediaConnectClientTypes.IngressGatewayBridge? + /// The name of the bridge. + /// This member is required. + public var name: Swift.String? + /// The outputs on this bridge. + public var outputs: [MediaConnectClientTypes.BridgeOutput]? + /// The placement Amazon Resource Number (ARN) of the bridge. + /// This member is required. + public var placementArn: Swift.String? + /// The settings for source failover. + public var sourceFailoverConfig: MediaConnectClientTypes.FailoverConfig? + /// The sources on this bridge. + public var sources: [MediaConnectClientTypes.BridgeSource]? + + public init ( + bridgeArn: Swift.String? = nil, + bridgeMessages: [MediaConnectClientTypes.MessageDetail]? = nil, + bridgeState: MediaConnectClientTypes.BridgeState? = nil, + egressGatewayBridge: MediaConnectClientTypes.EgressGatewayBridge? = nil, + ingressGatewayBridge: MediaConnectClientTypes.IngressGatewayBridge? = nil, + name: Swift.String? = nil, + outputs: [MediaConnectClientTypes.BridgeOutput]? = nil, + placementArn: Swift.String? = nil, + sourceFailoverConfig: MediaConnectClientTypes.FailoverConfig? = nil, + sources: [MediaConnectClientTypes.BridgeSource]? = nil + ) + { + self.bridgeArn = bridgeArn + self.bridgeMessages = bridgeMessages + self.bridgeState = bridgeState + self.egressGatewayBridge = egressGatewayBridge + self.ingressGatewayBridge = ingressGatewayBridge + self.name = name + self.outputs = outputs + self.placementArn = placementArn + self.sourceFailoverConfig = sourceFailoverConfig + self.sources = sources + } } + } -extension DeleteFlowOutputError { - public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { - switch errorType { - case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) - } +extension MediaConnectClientTypes.BridgeFlowOutput: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case flowArn = "flowArn" + case flowSourceArn = "flowSourceArn" + case name = "name" } -} - -public enum DeleteFlowOutputError: Swift.Error, Swift.Equatable { - case badRequestException(BadRequestException) - case forbiddenException(ForbiddenException) - case internalServerErrorException(InternalServerErrorException) - case notFoundException(NotFoundException) - case serviceUnavailableException(ServiceUnavailableException) - case tooManyRequestsException(TooManyRequestsException) - case unknown(UnknownAWSHttpServiceError) -} -extension DeleteFlowOutputResponse: ClientRuntime.HttpResponseBinding { - public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { - if case .stream(let reader) = httpResponse.body, - let responseDecoder = decoder { - let data = reader.toBytes().getData() - let output: DeleteFlowOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.flowArn = output.flowArn - self.status = output.status - } else { - self.flowArn = nil - self.status = nil + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let flowArn = self.flowArn { + try encodeContainer.encode(flowArn, forKey: .flowArn) } + if let flowSourceArn = self.flowSourceArn { + try encodeContainer.encode(flowSourceArn, forKey: .flowSourceArn) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) + flowArn = flowArnDecoded + let flowSourceArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowSourceArn) + flowSourceArn = flowSourceArnDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded } } -public struct DeleteFlowOutputResponse: Swift.Equatable { - /// The ARN of the flow that was deleted. - public var flowArn: Swift.String? - /// The status of the flow when the DeleteFlow process begins. - public var status: MediaConnectClientTypes.Status? +extension MediaConnectClientTypes { + /// The output of the bridge. A flow output is delivered to the AWS cloud. + public struct BridgeFlowOutput: Swift.Equatable { + /// The Amazon Resource Number (ARN) of the cloud flow. + /// This member is required. + public var flowArn: Swift.String? + /// The Amazon Resource Number (ARN) of the flow source. + /// This member is required. + public var flowSourceArn: Swift.String? + /// The name of the bridge's output. + /// This member is required. + public var name: Swift.String? - public init ( - flowArn: Swift.String? = nil, - status: MediaConnectClientTypes.Status? = nil - ) - { - self.flowArn = flowArn - self.status = status + public init ( + flowArn: Swift.String? = nil, + flowSourceArn: Swift.String? = nil, + name: Swift.String? = nil + ) + { + self.flowArn = flowArn + self.flowSourceArn = flowSourceArn + self.name = name + } } -} -struct DeleteFlowOutputResponseBody: Swift.Equatable { - let flowArn: Swift.String? - let status: MediaConnectClientTypes.Status? } -extension DeleteFlowOutputResponseBody: Swift.Decodable { +extension MediaConnectClientTypes.BridgeFlowSource: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case flowArn = "flowArn" - case status = "status" + case flowVpcInterfaceAttachment = "flowVpcInterfaceAttachment" + case name = "name" + case outputArn = "outputArn" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let flowArn = self.flowArn { + try encodeContainer.encode(flowArn, forKey: .flowArn) + } + if let flowVpcInterfaceAttachment = self.flowVpcInterfaceAttachment { + try encodeContainer.encode(flowVpcInterfaceAttachment, forKey: .flowVpcInterfaceAttachment) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let outputArn = self.outputArn { + try encodeContainer.encode(outputArn, forKey: .outputArn) + } } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) flowArn = flowArnDecoded - let statusDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Status.self, forKey: .status) - status = statusDecoded + let flowVpcInterfaceAttachmentDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.VpcInterfaceAttachment.self, forKey: .flowVpcInterfaceAttachment) + flowVpcInterfaceAttachment = flowVpcInterfaceAttachmentDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let outputArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .outputArn) + outputArn = outputArnDecoded } } -extension DescribeFlowInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let flowArn = flowArn else { - return nil +extension MediaConnectClientTypes { + /// The source of the bridge. A flow source originates in MediaConnect as an existing cloud flow. + public struct BridgeFlowSource: Swift.Equatable { + /// The ARN of the cloud flow used as a source of this bridge. + /// This member is required. + public var flowArn: Swift.String? + /// The name of the VPC interface attachment to use for this source. + public var flowVpcInterfaceAttachment: MediaConnectClientTypes.VpcInterfaceAttachment? + /// The name of the flow source. + /// This member is required. + public var name: Swift.String? + /// The Amazon Resource Number (ARN) of the output. + public var outputArn: Swift.String? + + public init ( + flowArn: Swift.String? = nil, + flowVpcInterfaceAttachment: MediaConnectClientTypes.VpcInterfaceAttachment? = nil, + name: Swift.String? = nil, + outputArn: Swift.String? = nil + ) + { + self.flowArn = flowArn + self.flowVpcInterfaceAttachment = flowVpcInterfaceAttachment + self.name = name + self.outputArn = outputArn } - return "/v1/flows/\(flowArn.urlPercentEncoding())" } -} - -public struct DescribeFlowInput: Swift.Equatable { - /// The ARN of the flow that you want to describe. - /// This member is required. - public var flowArn: Swift.String? - public init ( - flowArn: Swift.String? = nil - ) - { - self.flowArn = flowArn - } } -struct DescribeFlowInputBody: Swift.Equatable { -} +extension MediaConnectClientTypes.BridgeNetworkOutput: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case ipAddress = "ipAddress" + case name = "name" + case networkName = "networkName" + case port = "port" + case `protocol` = "protocol" + case ttl = "ttl" + } -extension DescribeFlowInputBody: Swift.Decodable { + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let ipAddress = self.ipAddress { + try encodeContainer.encode(ipAddress, forKey: .ipAddress) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let networkName = self.networkName { + try encodeContainer.encode(networkName, forKey: .networkName) + } + if let port = self.port { + try encodeContainer.encode(port, forKey: .port) + } + if let `protocol` = self.`protocol` { + try encodeContainer.encode(`protocol`.rawValue, forKey: .`protocol`) + } + if let ttl = self.ttl { + try encodeContainer.encode(ttl, forKey: .ttl) + } + } public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let ipAddressDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .ipAddress) + ipAddress = ipAddressDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let networkNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .networkName) + networkName = networkNameDecoded + let portDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .port) + port = portDecoded + let protocolDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ModelProtocol.self, forKey: .protocol) + `protocol` = protocolDecoded + let ttlDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .ttl) + ttl = ttlDecoded } } -extension DescribeFlowOutputError: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { - let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) - try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) - } -} +extension MediaConnectClientTypes { + /// The output of the bridge. A network output is delivered to your premises. + public struct BridgeNetworkOutput: Swift.Equatable { + /// The network output IP Address. + /// This member is required. + public var ipAddress: Swift.String? + /// The network output name. + /// This member is required. + public var name: Swift.String? + /// The network output's gateway network name. + /// This member is required. + public var networkName: Swift.String? + /// The network output port. + /// This member is required. + public var port: Swift.Int? + /// The network output protocol. + /// This member is required. + public var `protocol`: MediaConnectClientTypes.ModelProtocol? + /// The network output TTL. + /// This member is required. + public var ttl: Swift.Int? -extension DescribeFlowOutputError { - public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { - switch errorType { - case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + public init ( + ipAddress: Swift.String? = nil, + name: Swift.String? = nil, + networkName: Swift.String? = nil, + port: Swift.Int? = nil, + `protocol`: MediaConnectClientTypes.ModelProtocol? = nil, + ttl: Swift.Int? = nil + ) + { + self.ipAddress = ipAddress + self.name = name + self.networkName = networkName + self.port = port + self.`protocol` = `protocol` + self.ttl = ttl } } + } -extension DescribeFlowOutputError: WaiterTypedError { +extension MediaConnectClientTypes.BridgeNetworkSource: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case multicastIp = "multicastIp" + case name = "name" + case networkName = "networkName" + case port = "port" + case `protocol` = "protocol" + } - /// The Smithy identifier, without namespace, for the type of this error, or `nil` if the - /// error has no known type. - public var waiterErrorType: String? { - switch self { - case .badRequestException: return "BadRequestException" - case .forbiddenException: return "ForbiddenException" - case .internalServerErrorException: return "InternalServerErrorException" - case .notFoundException: return "NotFoundException" - case .serviceUnavailableException: return "ServiceUnavailableException" - case .tooManyRequestsException: return "TooManyRequestsException" - case .unknown(let error): return error.waiterErrorType + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let multicastIp = self.multicastIp { + try encodeContainer.encode(multicastIp, forKey: .multicastIp) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let networkName = self.networkName { + try encodeContainer.encode(networkName, forKey: .networkName) + } + if let port = self.port { + try encodeContainer.encode(port, forKey: .port) + } + if let `protocol` = self.`protocol` { + try encodeContainer.encode(`protocol`.rawValue, forKey: .`protocol`) } } -} -public enum DescribeFlowOutputError: Swift.Error, Swift.Equatable { - case badRequestException(BadRequestException) - case forbiddenException(ForbiddenException) - case internalServerErrorException(InternalServerErrorException) - case notFoundException(NotFoundException) - case serviceUnavailableException(ServiceUnavailableException) - case tooManyRequestsException(TooManyRequestsException) - case unknown(UnknownAWSHttpServiceError) + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let multicastIpDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .multicastIp) + multicastIp = multicastIpDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let networkNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .networkName) + networkName = networkNameDecoded + let portDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .port) + port = portDecoded + let protocolDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ModelProtocol.self, forKey: .protocol) + `protocol` = protocolDecoded + } } -extension DescribeFlowOutputResponse: ClientRuntime.HttpResponseBinding { - public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { - if case .stream(let reader) = httpResponse.body, - let responseDecoder = decoder { - let data = reader.toBytes().getData() - let output: DescribeFlowOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.flow = output.flow - self.messages = output.messages - } else { - self.flow = nil - self.messages = nil - } - } -} - -public struct DescribeFlowOutputResponse: Swift.Equatable { - /// The settings for a flow, including its source, outputs, and entitlements. - public var flow: MediaConnectClientTypes.Flow? - /// Messages that provide the state of the flow. - public var messages: MediaConnectClientTypes.Messages? +extension MediaConnectClientTypes { + /// The source of the bridge. A network source originates at your premises. + public struct BridgeNetworkSource: Swift.Equatable { + /// The network source multicast IP. + /// This member is required. + public var multicastIp: Swift.String? + /// The name of the network source. + /// This member is required. + public var name: Swift.String? + /// The network source's gateway network name. + /// This member is required. + public var networkName: Swift.String? + /// The network source port. + /// This member is required. + public var port: Swift.Int? + /// The network source protocol. + /// This member is required. + public var `protocol`: MediaConnectClientTypes.ModelProtocol? - public init ( - flow: MediaConnectClientTypes.Flow? = nil, - messages: MediaConnectClientTypes.Messages? = nil - ) - { - self.flow = flow - self.messages = messages + public init ( + multicastIp: Swift.String? = nil, + name: Swift.String? = nil, + networkName: Swift.String? = nil, + port: Swift.Int? = nil, + `protocol`: MediaConnectClientTypes.ModelProtocol? = nil + ) + { + self.multicastIp = multicastIp + self.name = name + self.networkName = networkName + self.port = port + self.`protocol` = `protocol` + } } -} -struct DescribeFlowOutputResponseBody: Swift.Equatable { - let flow: MediaConnectClientTypes.Flow? - let messages: MediaConnectClientTypes.Messages? } -extension DescribeFlowOutputResponseBody: Swift.Decodable { +extension MediaConnectClientTypes.BridgeOutput: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case flow = "flow" - case messages = "messages" + case flowOutput = "flowOutput" + case networkOutput = "networkOutput" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let flowOutput = self.flowOutput { + try encodeContainer.encode(flowOutput, forKey: .flowOutput) + } + if let networkOutput = self.networkOutput { + try encodeContainer.encode(networkOutput, forKey: .networkOutput) + } } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let flowDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Flow.self, forKey: .flow) - flow = flowDecoded - let messagesDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Messages.self, forKey: .messages) - messages = messagesDecoded + let flowOutputDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.BridgeFlowOutput.self, forKey: .flowOutput) + flowOutput = flowOutputDecoded + let networkOutputDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.BridgeNetworkOutput.self, forKey: .networkOutput) + networkOutput = networkOutputDecoded } } -extension DescribeOfferingInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let offeringArn = offeringArn else { - return nil +extension MediaConnectClientTypes { + /// The output of the bridge. + public struct BridgeOutput: Swift.Equatable { + /// The output of the bridge. A flow output is delivered to the AWS cloud. + public var flowOutput: MediaConnectClientTypes.BridgeFlowOutput? + /// The output of the bridge. A network output is delivered to your premises. + public var networkOutput: MediaConnectClientTypes.BridgeNetworkOutput? + + public init ( + flowOutput: MediaConnectClientTypes.BridgeFlowOutput? = nil, + networkOutput: MediaConnectClientTypes.BridgeNetworkOutput? = nil + ) + { + self.flowOutput = flowOutput + self.networkOutput = networkOutput } - return "/v1/offerings/\(offeringArn.urlPercentEncoding())" } + } -public struct DescribeOfferingInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the offering. - /// This member is required. - public var offeringArn: Swift.String? +extension MediaConnectClientTypes { + public enum BridgePlacement: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case available + case locked + case sdkUnknown(Swift.String) - public init ( - offeringArn: Swift.String? = nil - ) - { - self.offeringArn = offeringArn + public static var allCases: [BridgePlacement] { + return [ + .available, + .locked, + .sdkUnknown("") + ] + } + 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 .available: return "AVAILABLE" + case .locked: return "LOCKED" + case let .sdkUnknown(s): return s + } + } + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = BridgePlacement(rawValue: rawValue) ?? BridgePlacement.sdkUnknown(rawValue) + } } } -struct DescribeOfferingInputBody: Swift.Equatable { -} +extension MediaConnectClientTypes.BridgeSource: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case flowSource = "flowSource" + case networkSource = "networkSource" + } -extension DescribeOfferingInputBody: Swift.Decodable { + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let flowSource = self.flowSource { + try encodeContainer.encode(flowSource, forKey: .flowSource) + } + if let networkSource = self.networkSource { + try encodeContainer.encode(networkSource, forKey: .networkSource) + } + } public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let flowSourceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.BridgeFlowSource.self, forKey: .flowSource) + flowSource = flowSourceDecoded + let networkSourceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.BridgeNetworkSource.self, forKey: .networkSource) + networkSource = networkSourceDecoded } } -extension DescribeOfferingOutputError: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { - let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) - try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) +extension MediaConnectClientTypes { + /// The bridge's source. + public struct BridgeSource: Swift.Equatable { + /// The source of the bridge. A flow source originates in MediaConnect as an existing cloud flow. + public var flowSource: MediaConnectClientTypes.BridgeFlowSource? + /// The source of the bridge. A network source originates at your premises. + public var networkSource: MediaConnectClientTypes.BridgeNetworkSource? + + public init ( + flowSource: MediaConnectClientTypes.BridgeFlowSource? = nil, + networkSource: MediaConnectClientTypes.BridgeNetworkSource? = nil + ) + { + self.flowSource = flowSource + self.networkSource = networkSource + } } + } -extension DescribeOfferingOutputError { - public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { - switch errorType { - case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) +extension MediaConnectClientTypes { + public enum BridgeState: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case active + case creating + case deleted + case deleting + case deploying + case standby + case starting + case startFailed + case startPending + case stopping + case stopFailed + case updating + case sdkUnknown(Swift.String) + + public static var allCases: [BridgeState] { + return [ + .active, + .creating, + .deleted, + .deleting, + .deploying, + .standby, + .starting, + .startFailed, + .startPending, + .stopping, + .stopFailed, + .updating, + .sdkUnknown("") + ] + } + 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 .deleted: return "DELETED" + case .deleting: return "DELETING" + case .deploying: return "DEPLOYING" + case .standby: return "STANDBY" + case .starting: return "STARTING" + case .startFailed: return "START_FAILED" + case .startPending: return "START_PENDING" + case .stopping: return "STOPPING" + case .stopFailed: return "STOP_FAILED" + case .updating: return "UPDATING" + case let .sdkUnknown(s): return s + } + } + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = BridgeState(rawValue: rawValue) ?? BridgeState.sdkUnknown(rawValue) } } } -public enum DescribeOfferingOutputError: Swift.Error, Swift.Equatable { - case badRequestException(BadRequestException) - case internalServerErrorException(InternalServerErrorException) - case notFoundException(NotFoundException) - case serviceUnavailableException(ServiceUnavailableException) - case tooManyRequestsException(TooManyRequestsException) - case unknown(UnknownAWSHttpServiceError) +extension MediaConnectClientTypes { + public enum Colorimetry: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case bt2020 + case bt2100 + case bt601 + case bt709 + case st20651 + case st20653 + case xyz + case sdkUnknown(Swift.String) + + public static var allCases: [Colorimetry] { + return [ + .bt2020, + .bt2100, + .bt601, + .bt709, + .st20651, + .st20653, + .xyz, + .sdkUnknown("") + ] + } + 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 .bt2020: return "BT2020" + case .bt2100: return "BT2100" + case .bt601: return "BT601" + case .bt709: return "BT709" + case .st20651: return "ST2065-1" + case .st20653: return "ST2065-3" + case .xyz: return "XYZ" + case let .sdkUnknown(s): return s + } + } + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = Colorimetry(rawValue: rawValue) ?? Colorimetry.sdkUnknown(rawValue) + } + } } -extension DescribeOfferingOutputResponse: ClientRuntime.HttpResponseBinding { - public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { +extension ConflictException { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { if case .stream(let reader) = httpResponse.body, let responseDecoder = decoder { let data = reader.toBytes().getData() - let output: DescribeOfferingOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.offering = output.offering + let output: ConflictExceptionBody = try responseDecoder.decode(responseBody: data) + self.message = output.message } else { - self.offering = nil + self.message = nil } + self._headers = httpResponse.headers + self._statusCode = httpResponse.statusCode + self._requestID = requestID + self._message = message } } -public struct DescribeOfferingOutputResponse: Swift.Equatable { - /// A savings plan that reserves a certain amount of outbound bandwidth usage at a discounted rate each month over a period of time. - public var offering: MediaConnectClientTypes.Offering? +/// Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception. +public struct ConflictException: AWSClientRuntime.AWSHttpServiceError, Swift.Equatable { + public var _headers: ClientRuntime.Headers? + public var _statusCode: ClientRuntime.HttpStatusCode? + public var _message: Swift.String? + public var _requestID: Swift.String? + public var _retryable: Swift.Bool = false + public var _isThrottling: Swift.Bool = false + public var _type: ClientRuntime.ErrorType = .client + /// The error message returned by AWS Elemental MediaConnect. + /// This member is required. + public var message: Swift.String? public init ( - offering: MediaConnectClientTypes.Offering? = nil + message: Swift.String? = nil ) { - self.offering = offering + self.message = message } } -struct DescribeOfferingOutputResponseBody: Swift.Equatable { - let offering: MediaConnectClientTypes.Offering? +struct ConflictExceptionBody: Swift.Equatable { + let message: Swift.String? } -extension DescribeOfferingOutputResponseBody: Swift.Decodable { +extension ConflictExceptionBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case offering = "offering" + case message = "message" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let offeringDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Offering.self, forKey: .offering) - offering = offeringDecoded + let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) + message = messageDecoded } } -extension DescribeReservationInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let reservationArn = reservationArn else { - return nil +extension MediaConnectClientTypes { + public enum ConnectionStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case connected + case disconnected + case sdkUnknown(Swift.String) + + public static var allCases: [ConnectionStatus] { + return [ + .connected, + .disconnected, + .sdkUnknown("") + ] + } + 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 .connected: return "CONNECTED" + case .disconnected: return "DISCONNECTED" + case let .sdkUnknown(s): return s + } + } + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = ConnectionStatus(rawValue: rawValue) ?? ConnectionStatus.sdkUnknown(rawValue) } - return "/v1/reservations/\(reservationArn.urlPercentEncoding())" } } -public struct DescribeReservationInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the reservation. +extension CreateBridge420Exception { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: CreateBridge420ExceptionBody = try responseDecoder.decode(responseBody: data) + self.message = output.message + } else { + self.message = nil + } + self._headers = httpResponse.headers + self._statusCode = httpResponse.statusCode + self._requestID = requestID + self._message = message + } +} + +/// Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception. +public struct CreateBridge420Exception: AWSClientRuntime.AWSHttpServiceError, Swift.Equatable { + public var _headers: ClientRuntime.Headers? + public var _statusCode: ClientRuntime.HttpStatusCode? + public var _message: Swift.String? + public var _requestID: Swift.String? + public var _retryable: Swift.Bool = false + public var _isThrottling: Swift.Bool = false + public var _type: ClientRuntime.ErrorType = .client + /// The error message returned by AWS Elemental MediaConnect. /// This member is required. - public var reservationArn: Swift.String? + public var message: Swift.String? public init ( - reservationArn: Swift.String? = nil + message: Swift.String? = nil ) { - self.reservationArn = reservationArn + self.message = message } } -struct DescribeReservationInputBody: Swift.Equatable { +struct CreateBridge420ExceptionBody: Swift.Equatable { + let message: Swift.String? } -extension DescribeReservationInputBody: Swift.Decodable { +extension CreateBridge420ExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case message = "message" + } public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) + message = messageDecoded } } -extension DescribeReservationOutputError: ClientRuntime.HttpResponseBinding { +extension CreateBridgeInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case egressGatewayBridge = "egressGatewayBridge" + case ingressGatewayBridge = "ingressGatewayBridge" + case name = "name" + case outputs = "outputs" + case placementArn = "placementArn" + case sourceFailoverConfig = "sourceFailoverConfig" + case sources = "sources" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let egressGatewayBridge = self.egressGatewayBridge { + try encodeContainer.encode(egressGatewayBridge, forKey: .egressGatewayBridge) + } + if let ingressGatewayBridge = self.ingressGatewayBridge { + try encodeContainer.encode(ingressGatewayBridge, forKey: .ingressGatewayBridge) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let outputs = outputs { + var outputsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .outputs) + for addbridgeoutputrequest0 in outputs { + try outputsContainer.encode(addbridgeoutputrequest0) + } + } + if let placementArn = self.placementArn { + try encodeContainer.encode(placementArn, forKey: .placementArn) + } + if let sourceFailoverConfig = self.sourceFailoverConfig { + try encodeContainer.encode(sourceFailoverConfig, forKey: .sourceFailoverConfig) + } + if let sources = sources { + var sourcesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .sources) + for addbridgesourcerequest0 in sources { + try sourcesContainer.encode(addbridgesourcerequest0) + } + } + } +} + +extension CreateBridgeInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/v1/bridges" + } +} + +/// Creates a new bridge. The request must include one source. +public struct CreateBridgeInput: Swift.Equatable { + /// Create a bridge with the egress bridge type. An egress bridge is a cloud-to-ground bridge. The content comes from an existing MediaConnect flow and is delivered to your premises. + public var egressGatewayBridge: MediaConnectClientTypes.AddEgressGatewayBridgeRequest? + /// Create a bridge with the ingress bridge type. An ingress bridge is a ground-to-cloud bridge. The content originates at your premises and is delivered to the cloud. + public var ingressGatewayBridge: MediaConnectClientTypes.AddIngressGatewayBridgeRequest? + /// The name of the bridge. This name can not be modified after the bridge is created. + /// This member is required. + public var name: Swift.String? + /// The outputs that you want to add to this bridge. + public var outputs: [MediaConnectClientTypes.AddBridgeOutputRequest]? + /// The bridge placement Amazon Resource Number (ARN). + /// This member is required. + public var placementArn: Swift.String? + /// The settings for source failover. + public var sourceFailoverConfig: MediaConnectClientTypes.FailoverConfig? + /// The sources that you want to add to this bridge. + /// This member is required. + public var sources: [MediaConnectClientTypes.AddBridgeSourceRequest]? + + public init ( + egressGatewayBridge: MediaConnectClientTypes.AddEgressGatewayBridgeRequest? = nil, + ingressGatewayBridge: MediaConnectClientTypes.AddIngressGatewayBridgeRequest? = nil, + name: Swift.String? = nil, + outputs: [MediaConnectClientTypes.AddBridgeOutputRequest]? = nil, + placementArn: Swift.String? = nil, + sourceFailoverConfig: MediaConnectClientTypes.FailoverConfig? = nil, + sources: [MediaConnectClientTypes.AddBridgeSourceRequest]? = nil + ) + { + self.egressGatewayBridge = egressGatewayBridge + self.ingressGatewayBridge = ingressGatewayBridge + self.name = name + self.outputs = outputs + self.placementArn = placementArn + self.sourceFailoverConfig = sourceFailoverConfig + self.sources = sources + } +} + +struct CreateBridgeInputBody: Swift.Equatable { + let egressGatewayBridge: MediaConnectClientTypes.AddEgressGatewayBridgeRequest? + let ingressGatewayBridge: MediaConnectClientTypes.AddIngressGatewayBridgeRequest? + let name: Swift.String? + let outputs: [MediaConnectClientTypes.AddBridgeOutputRequest]? + let placementArn: Swift.String? + let sourceFailoverConfig: MediaConnectClientTypes.FailoverConfig? + let sources: [MediaConnectClientTypes.AddBridgeSourceRequest]? +} + +extension CreateBridgeInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case egressGatewayBridge = "egressGatewayBridge" + case ingressGatewayBridge = "ingressGatewayBridge" + case name = "name" + case outputs = "outputs" + case placementArn = "placementArn" + case sourceFailoverConfig = "sourceFailoverConfig" + case sources = "sources" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let egressGatewayBridgeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.AddEgressGatewayBridgeRequest.self, forKey: .egressGatewayBridge) + egressGatewayBridge = egressGatewayBridgeDecoded + let ingressGatewayBridgeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.AddIngressGatewayBridgeRequest.self, forKey: .ingressGatewayBridge) + ingressGatewayBridge = ingressGatewayBridgeDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let outputsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.AddBridgeOutputRequest?].self, forKey: .outputs) + var outputsDecoded0:[MediaConnectClientTypes.AddBridgeOutputRequest]? = nil + if let outputsContainer = outputsContainer { + outputsDecoded0 = [MediaConnectClientTypes.AddBridgeOutputRequest]() + for structure0 in outputsContainer { + if let structure0 = structure0 { + outputsDecoded0?.append(structure0) + } + } + } + outputs = outputsDecoded0 + let placementArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .placementArn) + placementArn = placementArnDecoded + let sourceFailoverConfigDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.FailoverConfig.self, forKey: .sourceFailoverConfig) + sourceFailoverConfig = sourceFailoverConfigDecoded + let sourcesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.AddBridgeSourceRequest?].self, forKey: .sources) + var sourcesDecoded0:[MediaConnectClientTypes.AddBridgeSourceRequest]? = nil + if let sourcesContainer = sourcesContainer { + sourcesDecoded0 = [MediaConnectClientTypes.AddBridgeSourceRequest]() + for structure0 in sourcesContainer { + if let structure0 = structure0 { + sourcesDecoded0?.append(structure0) + } + } + } + sources = sourcesDecoded0 + } +} + +extension CreateBridgeOutputError: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) @@ -1912,12 +2834,14 @@ extension DescribeReservationOutputError: ClientRuntime.HttpResponseBinding { } } -extension DescribeReservationOutputError { +extension CreateBridgeOutputError { public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { switch errorType { case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ConflictException" : self = .conflictException(try ConflictException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "CreateBridge420Exception" : self = .createBridge420Exception(try CreateBridge420Exception(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) @@ -1925,1427 +2849,1120 @@ extension DescribeReservationOutputError { } } -public enum DescribeReservationOutputError: Swift.Error, Swift.Equatable { +public enum CreateBridgeOutputError: Swift.Error, Swift.Equatable { case badRequestException(BadRequestException) + case conflictException(ConflictException) + case createBridge420Exception(CreateBridge420Exception) + case forbiddenException(ForbiddenException) case internalServerErrorException(InternalServerErrorException) - case notFoundException(NotFoundException) case serviceUnavailableException(ServiceUnavailableException) case tooManyRequestsException(TooManyRequestsException) case unknown(UnknownAWSHttpServiceError) } -extension DescribeReservationOutputResponse: ClientRuntime.HttpResponseBinding { +extension CreateBridgeOutputResponse: ClientRuntime.HttpResponseBinding { public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { if case .stream(let reader) = httpResponse.body, let responseDecoder = decoder { let data = reader.toBytes().getData() - let output: DescribeReservationOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.reservation = output.reservation + let output: CreateBridgeOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.bridge = output.bridge } else { - self.reservation = nil + self.bridge = nil } } } -public struct DescribeReservationOutputResponse: Swift.Equatable { - /// A pricing agreement for a discounted rate for a specific outbound bandwidth that your MediaConnect account will use each month over a specific time period. The discounted rate in the reservation applies to outbound bandwidth for all flows from your account until your account reaches the amount of bandwidth in your reservation. If you use more outbound bandwidth than the agreed upon amount in a single month, the overage is charged at the on-demand rate. - public var reservation: MediaConnectClientTypes.Reservation? +public struct CreateBridgeOutputResponse: Swift.Equatable { + /// A Bridge is the connection between your datacenter's Instances and the AWS cloud. A bridge can be used to send video from the AWS cloud to your datacenter or from your datacenter to the AWS cloud. + public var bridge: MediaConnectClientTypes.Bridge? public init ( - reservation: MediaConnectClientTypes.Reservation? = nil + bridge: MediaConnectClientTypes.Bridge? = nil ) { - self.reservation = reservation + self.bridge = bridge } } -struct DescribeReservationOutputResponseBody: Swift.Equatable { - let reservation: MediaConnectClientTypes.Reservation? +struct CreateBridgeOutputResponseBody: Swift.Equatable { + let bridge: MediaConnectClientTypes.Bridge? } -extension DescribeReservationOutputResponseBody: Swift.Decodable { +extension CreateBridgeOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case reservation = "reservation" + case bridge = "bridge" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let reservationDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Reservation.self, forKey: .reservation) - reservation = reservationDecoded + let bridgeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Bridge.self, forKey: .bridge) + bridge = bridgeDecoded } } -extension MediaConnectClientTypes.DestinationConfiguration: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case destinationIp = "destinationIp" - case destinationPort = "destinationPort" - case interface = "interface" - case outboundIp = "outboundIp" +extension CreateFlow420Exception { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: CreateFlow420ExceptionBody = try responseDecoder.decode(responseBody: data) + self.message = output.message + } else { + self.message = nil + } + self._headers = httpResponse.headers + self._statusCode = httpResponse.statusCode + self._requestID = requestID + self._message = message } +} - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let destinationIp = self.destinationIp { - try encodeContainer.encode(destinationIp, forKey: .destinationIp) - } - if let destinationPort = self.destinationPort { - try encodeContainer.encode(destinationPort, forKey: .destinationPort) - } - if let interface = self.interface { - try encodeContainer.encode(interface, forKey: .interface) - } - if let outboundIp = self.outboundIp { - try encodeContainer.encode(outboundIp, forKey: .outboundIp) - } +/// Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception. +public struct CreateFlow420Exception: AWSClientRuntime.AWSHttpServiceError, Swift.Equatable { + public var _headers: ClientRuntime.Headers? + public var _statusCode: ClientRuntime.HttpStatusCode? + public var _message: Swift.String? + public var _requestID: Swift.String? + public var _retryable: Swift.Bool = false + public var _isThrottling: Swift.Bool = false + public var _type: ClientRuntime.ErrorType = .client + /// The error message returned by AWS Elemental MediaConnect. + /// This member is required. + public var message: Swift.String? + + public init ( + message: Swift.String? = nil + ) + { + self.message = message + } +} + +struct CreateFlow420ExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension CreateFlow420ExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case message = "message" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let destinationIpDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .destinationIp) - destinationIp = destinationIpDecoded - let destinationPortDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .destinationPort) - destinationPort = destinationPortDecoded - let interfaceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Interface.self, forKey: .interface) - interface = interfaceDecoded - let outboundIpDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .outboundIp) - outboundIp = outboundIpDecoded + let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) + message = messageDecoded } } -extension MediaConnectClientTypes { - /// The transport parameters that are associated with an outbound media stream. - public struct DestinationConfiguration: Swift.Equatable { - /// The IP address where contents of the media stream will be sent. - /// This member is required. - public var destinationIp: Swift.String? - /// The port to use when the content of the media stream is distributed to the output. - /// This member is required. - public var destinationPort: Swift.Int? - /// The VPC interface that is used for the media stream associated with the output. - /// This member is required. - public var interface: MediaConnectClientTypes.Interface? - /// The IP address that the receiver requires in order to establish a connection with the flow. This value is represented by the elastic network interface IP address of the VPC. This field applies only to outputs that use the CDI or ST 2110 JPEG XS protocol. - /// This member is required. - public var outboundIp: Swift.String? - - public init ( - destinationIp: Swift.String? = nil, - destinationPort: Swift.Int? = nil, - interface: MediaConnectClientTypes.Interface? = nil, - outboundIp: Swift.String? = nil - ) - { - self.destinationIp = destinationIp - self.destinationPort = destinationPort - self.interface = interface - self.outboundIp = outboundIp - } - } - -} - -extension MediaConnectClientTypes.DestinationConfigurationRequest: Swift.Codable { +extension CreateFlowInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case destinationIp = "destinationIp" - case destinationPort = "destinationPort" - case interface = "interface" + case availabilityZone = "availabilityZone" + case entitlements = "entitlements" + case maintenance = "maintenance" + case mediaStreams = "mediaStreams" + case name = "name" + case outputs = "outputs" + case source = "source" + case sourceFailoverConfig = "sourceFailoverConfig" + case sources = "sources" + case vpcInterfaces = "vpcInterfaces" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let destinationIp = self.destinationIp { - try encodeContainer.encode(destinationIp, forKey: .destinationIp) - } - if let destinationPort = self.destinationPort { - try encodeContainer.encode(destinationPort, forKey: .destinationPort) - } - if let interface = self.interface { - try encodeContainer.encode(interface, forKey: .interface) - } - } - - public init (from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let destinationIpDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .destinationIp) - destinationIp = destinationIpDecoded - let destinationPortDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .destinationPort) - destinationPort = destinationPortDecoded - let interfaceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.InterfaceRequest.self, forKey: .interface) - interface = interfaceDecoded - } -} - -extension MediaConnectClientTypes { - /// The transport parameters that you want to associate with an outbound media stream. - public struct DestinationConfigurationRequest: Swift.Equatable { - /// The IP address where you want MediaConnect to send contents of the media stream. - /// This member is required. - public var destinationIp: Swift.String? - /// The port that you want MediaConnect to use when it distributes the media stream to the output. - /// This member is required. - public var destinationPort: Swift.Int? - /// The VPC interface that you want to use for the media stream associated with the output. - /// This member is required. - public var interface: MediaConnectClientTypes.InterfaceRequest? - - public init ( - destinationIp: Swift.String? = nil, - destinationPort: Swift.Int? = nil, - interface: MediaConnectClientTypes.InterfaceRequest? = nil - ) - { - self.destinationIp = destinationIp - self.destinationPort = destinationPort - self.interface = interface - } - } - -} - -extension MediaConnectClientTypes { - public enum DurationUnits: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case months - case sdkUnknown(Swift.String) - - public static var allCases: [DurationUnits] { - return [ - .months, - .sdkUnknown("") - ] - } - public init?(rawValue: Swift.String) { - let value = Self.allCases.first(where: { $0.rawValue == rawValue }) - self = value ?? Self.sdkUnknown(rawValue) + if let availabilityZone = self.availabilityZone { + try encodeContainer.encode(availabilityZone, forKey: .availabilityZone) } - public var rawValue: Swift.String { - switch self { - case .months: return "MONTHS" - case let .sdkUnknown(s): return s + if let entitlements = entitlements { + var entitlementsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .entitlements) + for grantentitlementrequest0 in entitlements { + try entitlementsContainer.encode(grantentitlementrequest0) } } - public init(from decoder: Swift.Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(RawValue.self) - self = DurationUnits(rawValue: rawValue) ?? DurationUnits.sdkUnknown(rawValue) + if let maintenance = self.maintenance { + try encodeContainer.encode(maintenance, forKey: .maintenance) } - } -} - -extension MediaConnectClientTypes { - public enum EncoderProfile: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case high - case main - case sdkUnknown(Swift.String) - - public static var allCases: [EncoderProfile] { - return [ - .high, - .main, - .sdkUnknown("") - ] + if let mediaStreams = mediaStreams { + var mediaStreamsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .mediaStreams) + for addmediastreamrequest0 in mediaStreams { + try mediaStreamsContainer.encode(addmediastreamrequest0) + } } - public init?(rawValue: Swift.String) { - let value = Self.allCases.first(where: { $0.rawValue == rawValue }) - self = value ?? Self.sdkUnknown(rawValue) + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) } - public var rawValue: Swift.String { - switch self { - case .high: return "high" - case .main: return "main" - case let .sdkUnknown(s): return s + if let outputs = outputs { + var outputsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .outputs) + for addoutputrequest0 in outputs { + try outputsContainer.encode(addoutputrequest0) } } - public init(from decoder: Swift.Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(RawValue.self) - self = EncoderProfile(rawValue: rawValue) ?? EncoderProfile.sdkUnknown(rawValue) - } - } -} - -extension MediaConnectClientTypes { - public enum EncodingName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case jxsv - case pcm - case raw - case smpte291 - case sdkUnknown(Swift.String) - - public static var allCases: [EncodingName] { - return [ - .jxsv, - .pcm, - .raw, - .smpte291, - .sdkUnknown("") - ] + if let source = self.source { + try encodeContainer.encode(source, forKey: .source) } - public init?(rawValue: Swift.String) { - let value = Self.allCases.first(where: { $0.rawValue == rawValue }) - self = value ?? Self.sdkUnknown(rawValue) + if let sourceFailoverConfig = self.sourceFailoverConfig { + try encodeContainer.encode(sourceFailoverConfig, forKey: .sourceFailoverConfig) } - public var rawValue: Swift.String { - switch self { - case .jxsv: return "jxsv" - case .pcm: return "pcm" - case .raw: return "raw" - case .smpte291: return "smpte291" - case let .sdkUnknown(s): return s + if let sources = sources { + var sourcesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .sources) + for setsourcerequest0 in sources { + try sourcesContainer.encode(setsourcerequest0) } } - public init(from decoder: Swift.Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(RawValue.self) - self = EncodingName(rawValue: rawValue) ?? EncodingName.sdkUnknown(rawValue) - } - } -} - -extension MediaConnectClientTypes.EncodingParameters: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case compressionFactor = "compressionFactor" - case encoderProfile = "encoderProfile" - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let compressionFactor = self.compressionFactor { - try encodeContainer.encode(compressionFactor, forKey: .compressionFactor) - } - if let encoderProfile = self.encoderProfile { - try encodeContainer.encode(encoderProfile.rawValue, forKey: .encoderProfile) + if let vpcInterfaces = vpcInterfaces { + var vpcInterfacesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .vpcInterfaces) + for vpcinterfacerequest0 in vpcInterfaces { + try vpcInterfacesContainer.encode(vpcinterfacerequest0) + } } } - - public init (from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let compressionFactorDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .compressionFactor) - compressionFactor = compressionFactorDecoded - let encoderProfileDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.EncoderProfile.self, forKey: .encoderProfile) - encoderProfile = encoderProfileDecoded - } } -extension MediaConnectClientTypes { - /// A collection of parameters that determine how MediaConnect will convert the content. These fields only apply to outputs on flows that have a CDI source. - public struct EncodingParameters: Swift.Equatable { - /// A value that is used to calculate compression for an output. The bitrate of the output is calculated as follows: Output bitrate = (1 / compressionFactor) * (source bitrate) This property only applies to outputs that use the ST 2110 JPEG XS protocol, with a flow source that uses the CDI protocol. Valid values are floating point numbers in the range of 3.0 to 10.0, inclusive. - /// This member is required. - public var compressionFactor: Swift.Double? - /// A setting on the encoder that drives compression settings. This property only applies to video media streams associated with outputs that use the ST 2110 JPEG XS protocol, with a flow source that uses the CDI protocol. - /// This member is required. - public var encoderProfile: MediaConnectClientTypes.EncoderProfile? - - public init ( - compressionFactor: Swift.Double? = nil, - encoderProfile: MediaConnectClientTypes.EncoderProfile? = nil - ) - { - self.compressionFactor = compressionFactor - self.encoderProfile = encoderProfile - } +extension CreateFlowInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/v1/flows" } - } -extension MediaConnectClientTypes.EncodingParametersRequest: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case compressionFactor = "compressionFactor" - case encoderProfile = "encoderProfile" - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let compressionFactor = self.compressionFactor { - try encodeContainer.encode(compressionFactor, forKey: .compressionFactor) - } - if let encoderProfile = self.encoderProfile { - try encodeContainer.encode(encoderProfile.rawValue, forKey: .encoderProfile) - } - } +/// Creates a new flow. The request must include one source. The request optionally can include outputs (up to 50) and entitlements (up to 50). +public struct CreateFlowInput: Swift.Equatable { + /// The Availability Zone that you want to create the flow in. These options are limited to the Availability Zones within the current AWS Region. + public var availabilityZone: Swift.String? + /// The entitlements that you want to grant on a flow. + public var entitlements: [MediaConnectClientTypes.GrantEntitlementRequest]? + /// Create maintenance setting for a flow + public var maintenance: MediaConnectClientTypes.AddMaintenance? + /// The media streams that you want to add to the flow. You can associate these media streams with sources and outputs on the flow. + public var mediaStreams: [MediaConnectClientTypes.AddMediaStreamRequest]? + /// The name of the flow. + /// This member is required. + public var name: Swift.String? + /// The outputs that you want to add to this flow. + public var outputs: [MediaConnectClientTypes.AddOutputRequest]? + /// The settings for the source of the flow. + public var source: MediaConnectClientTypes.SetSourceRequest? + /// The settings for source failover. + public var sourceFailoverConfig: MediaConnectClientTypes.FailoverConfig? + public var sources: [MediaConnectClientTypes.SetSourceRequest]? + /// The VPC interfaces you want on the flow. + public var vpcInterfaces: [MediaConnectClientTypes.VpcInterfaceRequest]? - public init (from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let compressionFactorDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .compressionFactor) - compressionFactor = compressionFactorDecoded - let encoderProfileDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.EncoderProfile.self, forKey: .encoderProfile) - encoderProfile = encoderProfileDecoded + public init ( + availabilityZone: Swift.String? = nil, + entitlements: [MediaConnectClientTypes.GrantEntitlementRequest]? = nil, + maintenance: MediaConnectClientTypes.AddMaintenance? = nil, + mediaStreams: [MediaConnectClientTypes.AddMediaStreamRequest]? = nil, + name: Swift.String? = nil, + outputs: [MediaConnectClientTypes.AddOutputRequest]? = nil, + source: MediaConnectClientTypes.SetSourceRequest? = nil, + sourceFailoverConfig: MediaConnectClientTypes.FailoverConfig? = nil, + sources: [MediaConnectClientTypes.SetSourceRequest]? = nil, + vpcInterfaces: [MediaConnectClientTypes.VpcInterfaceRequest]? = nil + ) + { + self.availabilityZone = availabilityZone + self.entitlements = entitlements + self.maintenance = maintenance + self.mediaStreams = mediaStreams + self.name = name + self.outputs = outputs + self.source = source + self.sourceFailoverConfig = sourceFailoverConfig + self.sources = sources + self.vpcInterfaces = vpcInterfaces } } -extension MediaConnectClientTypes { - /// A collection of parameters that determine how MediaConnect will convert the content. These fields only apply to outputs on flows that have a CDI source. - public struct EncodingParametersRequest: Swift.Equatable { - /// A value that is used to calculate compression for an output. The bitrate of the output is calculated as follows: Output bitrate = (1 / compressionFactor) * (source bitrate) This property only applies to outputs that use the ST 2110 JPEG XS protocol, with a flow source that uses the CDI protocol. Valid values are floating point numbers in the range of 3.0 to 10.0, inclusive. - /// This member is required. - public var compressionFactor: Swift.Double? - /// A setting on the encoder that drives compression settings. This property only applies to video media streams associated with outputs that use the ST 2110 JPEG XS protocol, if at least one source on the flow uses the CDI protocol. - /// This member is required. - public var encoderProfile: MediaConnectClientTypes.EncoderProfile? - - public init ( - compressionFactor: Swift.Double? = nil, - encoderProfile: MediaConnectClientTypes.EncoderProfile? = nil - ) - { - self.compressionFactor = compressionFactor - self.encoderProfile = encoderProfile - } - } - +struct CreateFlowInputBody: Swift.Equatable { + let availabilityZone: Swift.String? + let entitlements: [MediaConnectClientTypes.GrantEntitlementRequest]? + let mediaStreams: [MediaConnectClientTypes.AddMediaStreamRequest]? + let name: Swift.String? + let outputs: [MediaConnectClientTypes.AddOutputRequest]? + let source: MediaConnectClientTypes.SetSourceRequest? + let sourceFailoverConfig: MediaConnectClientTypes.FailoverConfig? + let sources: [MediaConnectClientTypes.SetSourceRequest]? + let vpcInterfaces: [MediaConnectClientTypes.VpcInterfaceRequest]? + let maintenance: MediaConnectClientTypes.AddMaintenance? } -extension MediaConnectClientTypes.Encryption: Swift.Codable { +extension CreateFlowInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case algorithm = "algorithm" - case constantInitializationVector = "constantInitializationVector" - case deviceId = "deviceId" - case keyType = "keyType" - case region = "region" - case resourceId = "resourceId" - case roleArn = "roleArn" - case secretArn = "secretArn" - case url = "url" + case availabilityZone = "availabilityZone" + case entitlements = "entitlements" + case maintenance = "maintenance" + case mediaStreams = "mediaStreams" + case name = "name" + case outputs = "outputs" + case source = "source" + case sourceFailoverConfig = "sourceFailoverConfig" + case sources = "sources" + case vpcInterfaces = "vpcInterfaces" } - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let algorithm = self.algorithm { - try encodeContainer.encode(algorithm.rawValue, forKey: .algorithm) - } - if let constantInitializationVector = self.constantInitializationVector { - try encodeContainer.encode(constantInitializationVector, forKey: .constantInitializationVector) - } - if let deviceId = self.deviceId { - try encodeContainer.encode(deviceId, forKey: .deviceId) - } - if let keyType = self.keyType { - try encodeContainer.encode(keyType.rawValue, forKey: .keyType) - } - if let region = self.region { - try encodeContainer.encode(region, forKey: .region) + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let availabilityZoneDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .availabilityZone) + availabilityZone = availabilityZoneDecoded + let entitlementsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.GrantEntitlementRequest?].self, forKey: .entitlements) + var entitlementsDecoded0:[MediaConnectClientTypes.GrantEntitlementRequest]? = nil + if let entitlementsContainer = entitlementsContainer { + entitlementsDecoded0 = [MediaConnectClientTypes.GrantEntitlementRequest]() + for structure0 in entitlementsContainer { + if let structure0 = structure0 { + entitlementsDecoded0?.append(structure0) + } + } } - if let resourceId = self.resourceId { - try encodeContainer.encode(resourceId, forKey: .resourceId) + entitlements = entitlementsDecoded0 + let mediaStreamsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.AddMediaStreamRequest?].self, forKey: .mediaStreams) + var mediaStreamsDecoded0:[MediaConnectClientTypes.AddMediaStreamRequest]? = nil + if let mediaStreamsContainer = mediaStreamsContainer { + mediaStreamsDecoded0 = [MediaConnectClientTypes.AddMediaStreamRequest]() + for structure0 in mediaStreamsContainer { + if let structure0 = structure0 { + mediaStreamsDecoded0?.append(structure0) + } + } } - if let roleArn = self.roleArn { - try encodeContainer.encode(roleArn, forKey: .roleArn) + mediaStreams = mediaStreamsDecoded0 + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let outputsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.AddOutputRequest?].self, forKey: .outputs) + var outputsDecoded0:[MediaConnectClientTypes.AddOutputRequest]? = nil + if let outputsContainer = outputsContainer { + outputsDecoded0 = [MediaConnectClientTypes.AddOutputRequest]() + for structure0 in outputsContainer { + if let structure0 = structure0 { + outputsDecoded0?.append(structure0) + } + } } - if let secretArn = self.secretArn { - try encodeContainer.encode(secretArn, forKey: .secretArn) + outputs = outputsDecoded0 + let sourceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.SetSourceRequest.self, forKey: .source) + source = sourceDecoded + let sourceFailoverConfigDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.FailoverConfig.self, forKey: .sourceFailoverConfig) + sourceFailoverConfig = sourceFailoverConfigDecoded + let sourcesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.SetSourceRequest?].self, forKey: .sources) + var sourcesDecoded0:[MediaConnectClientTypes.SetSourceRequest]? = nil + if let sourcesContainer = sourcesContainer { + sourcesDecoded0 = [MediaConnectClientTypes.SetSourceRequest]() + for structure0 in sourcesContainer { + if let structure0 = structure0 { + sourcesDecoded0?.append(structure0) + } + } } - if let url = self.url { - try encodeContainer.encode(url, forKey: .url) + sources = sourcesDecoded0 + let vpcInterfacesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.VpcInterfaceRequest?].self, forKey: .vpcInterfaces) + var vpcInterfacesDecoded0:[MediaConnectClientTypes.VpcInterfaceRequest]? = nil + if let vpcInterfacesContainer = vpcInterfacesContainer { + vpcInterfacesDecoded0 = [MediaConnectClientTypes.VpcInterfaceRequest]() + for structure0 in vpcInterfacesContainer { + if let structure0 = structure0 { + vpcInterfacesDecoded0?.append(structure0) + } + } } + vpcInterfaces = vpcInterfacesDecoded0 + let maintenanceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.AddMaintenance.self, forKey: .maintenance) + maintenance = maintenanceDecoded } +} - public init (from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let algorithmDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Algorithm.self, forKey: .algorithm) - algorithm = algorithmDecoded - let constantInitializationVectorDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .constantInitializationVector) - constantInitializationVector = constantInitializationVectorDecoded - let deviceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .deviceId) - deviceId = deviceIdDecoded - let keyTypeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.KeyType.self, forKey: .keyType) - keyType = keyTypeDecoded - let regionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .region) - region = regionDecoded - let resourceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceId) - resourceId = resourceIdDecoded - let roleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .roleArn) - roleArn = roleArnDecoded - let secretArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .secretArn) - secretArn = secretArnDecoded - let urlDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .url) - url = urlDecoded +extension CreateFlowOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) } } -extension MediaConnectClientTypes { - /// Information about the encryption of the flow. - public struct Encryption: Swift.Equatable { - /// The type of algorithm that is used for the encryption (such as aes128, aes192, or aes256). - public var algorithm: MediaConnectClientTypes.Algorithm? - /// A 128-bit, 16-byte hex value represented by a 32-character string, to be used with the key for encrypting content. This parameter is not valid for static key encryption. - public var constantInitializationVector: Swift.String? - /// The value of one of the devices that you configured with your digital rights management (DRM) platform key provider. This parameter is required for SPEKE encryption and is not valid for static key encryption. - public var deviceId: Swift.String? - /// The type of key that is used for the encryption. If no keyType is provided, the service will use the default setting (static-key). - public var keyType: MediaConnectClientTypes.KeyType? - /// The AWS Region that the API Gateway proxy endpoint was created in. This parameter is required for SPEKE encryption and is not valid for static key encryption. - public var region: Swift.String? - /// An identifier for the content. The service sends this value to the key server to identify the current endpoint. The resource ID is also known as the content ID. This parameter is required for SPEKE encryption and is not valid for static key encryption. - public var resourceId: Swift.String? - /// The ARN of the role that you created during setup (when you set up AWS Elemental MediaConnect as a trusted entity). - /// This member is required. - public var roleArn: Swift.String? - /// The ARN of the secret that you created in AWS Secrets Manager to store the encryption key. This parameter is required for static key encryption and is not valid for SPEKE encryption. - public var secretArn: Swift.String? - /// The URL from the API Gateway proxy that you set up to talk to your key server. This parameter is required for SPEKE encryption and is not valid for static key encryption. - public var url: Swift.String? - - public init ( - algorithm: MediaConnectClientTypes.Algorithm? = nil, - constantInitializationVector: Swift.String? = nil, - deviceId: Swift.String? = nil, - keyType: MediaConnectClientTypes.KeyType? = nil, - region: Swift.String? = nil, - resourceId: Swift.String? = nil, - roleArn: Swift.String? = nil, - secretArn: Swift.String? = nil, - url: Swift.String? = nil - ) - { - self.algorithm = algorithm - self.constantInitializationVector = constantInitializationVector - self.deviceId = deviceId - self.keyType = keyType - self.region = region - self.resourceId = resourceId - self.roleArn = roleArn - self.secretArn = secretArn - self.url = url +extension CreateFlowOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "CreateFlow420Exception" : self = .createFlow420Exception(try CreateFlow420Exception(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + } + } +} + +public enum CreateFlowOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case createFlow420Exception(CreateFlow420Exception) + case forbiddenException(ForbiddenException) + case internalServerErrorException(InternalServerErrorException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) +} + +extension CreateFlowOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: CreateFlowOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.flow = output.flow + } else { + self.flow = nil } } +} + +public struct CreateFlowOutputResponse: Swift.Equatable { + /// The settings for a flow, including its source, outputs, and entitlements. + public var flow: MediaConnectClientTypes.Flow? + + public init ( + flow: MediaConnectClientTypes.Flow? = nil + ) + { + self.flow = flow + } +} +struct CreateFlowOutputResponseBody: Swift.Equatable { + let flow: MediaConnectClientTypes.Flow? } -extension MediaConnectClientTypes.Entitlement: Swift.Codable { +extension CreateFlowOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case dataTransferSubscriberFeePercent = "dataTransferSubscriberFeePercent" - case description = "description" - case encryption = "encryption" - case entitlementArn = "entitlementArn" - case entitlementStatus = "entitlementStatus" + case flow = "flow" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let flowDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Flow.self, forKey: .flow) + flow = flowDecoded + } +} + +extension CreateGateway420Exception { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: CreateGateway420ExceptionBody = try responseDecoder.decode(responseBody: data) + self.message = output.message + } else { + self.message = nil + } + self._headers = httpResponse.headers + self._statusCode = httpResponse.statusCode + self._requestID = requestID + self._message = message + } +} + +/// Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception. +public struct CreateGateway420Exception: AWSClientRuntime.AWSHttpServiceError, Swift.Equatable { + public var _headers: ClientRuntime.Headers? + public var _statusCode: ClientRuntime.HttpStatusCode? + public var _message: Swift.String? + public var _requestID: Swift.String? + public var _retryable: Swift.Bool = false + public var _isThrottling: Swift.Bool = false + public var _type: ClientRuntime.ErrorType = .client + /// The error message returned by AWS Elemental MediaConnect. + /// This member is required. + public var message: Swift.String? + + public init ( + message: Swift.String? = nil + ) + { + self.message = message + } +} + +struct CreateGateway420ExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension CreateGateway420ExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case message = "message" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) + message = messageDecoded + } +} + +extension CreateGatewayInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case egressCidrBlocks = "egressCidrBlocks" case name = "name" - case subscribers = "subscribers" + case networks = "networks" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let dataTransferSubscriberFeePercent = self.dataTransferSubscriberFeePercent { - try encodeContainer.encode(dataTransferSubscriberFeePercent, forKey: .dataTransferSubscriberFeePercent) - } - if let description = self.description { - try encodeContainer.encode(description, forKey: .description) - } - if let encryption = self.encryption { - try encodeContainer.encode(encryption, forKey: .encryption) - } - if let entitlementArn = self.entitlementArn { - try encodeContainer.encode(entitlementArn, forKey: .entitlementArn) - } - if let entitlementStatus = self.entitlementStatus { - try encodeContainer.encode(entitlementStatus.rawValue, forKey: .entitlementStatus) + if let egressCidrBlocks = egressCidrBlocks { + var egressCidrBlocksContainer = encodeContainer.nestedUnkeyedContainer(forKey: .egressCidrBlocks) + for __string0 in egressCidrBlocks { + try egressCidrBlocksContainer.encode(__string0) + } } if let name = self.name { try encodeContainer.encode(name, forKey: .name) } - if let subscribers = subscribers { - var subscribersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .subscribers) - for __string0 in subscribers { - try subscribersContainer.encode(__string0) + if let networks = networks { + var networksContainer = encodeContainer.nestedUnkeyedContainer(forKey: .networks) + for gatewaynetwork0 in networks { + try networksContainer.encode(gatewaynetwork0) } } } +} + +extension CreateGatewayInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/v1/gateways" + } +} + +/// Creates a new gateway. The request must include at least one network (up to 4). +public struct CreateGatewayInput: Swift.Equatable { + /// The range of IP addresses that are allowed to contribute content or initiate output requests for flows communicating with this gateway. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16. + /// This member is required. + public var egressCidrBlocks: [Swift.String]? + /// The name of the gateway. This name can not be modified after the gateway is created. + /// This member is required. + public var name: Swift.String? + /// The list of networks that you want to add. + /// This member is required. + public var networks: [MediaConnectClientTypes.GatewayNetwork]? + + public init ( + egressCidrBlocks: [Swift.String]? = nil, + name: Swift.String? = nil, + networks: [MediaConnectClientTypes.GatewayNetwork]? = nil + ) + { + self.egressCidrBlocks = egressCidrBlocks + self.name = name + self.networks = networks + } +} + +struct CreateGatewayInputBody: Swift.Equatable { + let egressCidrBlocks: [Swift.String]? + let name: Swift.String? + let networks: [MediaConnectClientTypes.GatewayNetwork]? +} + +extension CreateGatewayInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case egressCidrBlocks = "egressCidrBlocks" + case name = "name" + case networks = "networks" + } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let dataTransferSubscriberFeePercentDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .dataTransferSubscriberFeePercent) - dataTransferSubscriberFeePercent = dataTransferSubscriberFeePercentDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let encryptionDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Encryption.self, forKey: .encryption) - encryption = encryptionDecoded - let entitlementArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .entitlementArn) - entitlementArn = entitlementArnDecoded - let entitlementStatusDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.EntitlementStatus.self, forKey: .entitlementStatus) - entitlementStatus = entitlementStatusDecoded + let egressCidrBlocksContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .egressCidrBlocks) + var egressCidrBlocksDecoded0:[Swift.String]? = nil + if let egressCidrBlocksContainer = egressCidrBlocksContainer { + egressCidrBlocksDecoded0 = [Swift.String]() + for string0 in egressCidrBlocksContainer { + if let string0 = string0 { + egressCidrBlocksDecoded0?.append(string0) + } + } + } + egressCidrBlocks = egressCidrBlocksDecoded0 let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) name = nameDecoded - let subscribersContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .subscribers) - var subscribersDecoded0:[Swift.String]? = nil - if let subscribersContainer = subscribersContainer { - subscribersDecoded0 = [Swift.String]() - for string0 in subscribersContainer { - if let string0 = string0 { - subscribersDecoded0?.append(string0) + let networksContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.GatewayNetwork?].self, forKey: .networks) + var networksDecoded0:[MediaConnectClientTypes.GatewayNetwork]? = nil + if let networksContainer = networksContainer { + networksDecoded0 = [MediaConnectClientTypes.GatewayNetwork]() + for structure0 in networksContainer { + if let structure0 = structure0 { + networksDecoded0?.append(structure0) } } } - subscribers = subscribersDecoded0 + networks = networksDecoded0 } } -extension MediaConnectClientTypes { - /// The settings for a flow entitlement. - public struct Entitlement: Swift.Equatable { - /// Percentage from 0-100 of the data transfer cost to be billed to the subscriber. - public var dataTransferSubscriberFeePercent: Swift.Int? - /// A description of the entitlement. - public var description: Swift.String? - /// The type of encryption that will be used on the output that is associated with this entitlement. - public var encryption: MediaConnectClientTypes.Encryption? - /// The ARN of the entitlement. - /// This member is required. - public var entitlementArn: Swift.String? - /// An indication of whether the entitlement is enabled. - public var entitlementStatus: MediaConnectClientTypes.EntitlementStatus? - /// The name of the entitlement. - /// This member is required. - public var name: Swift.String? - /// The AWS account IDs that you want to share your content with. The receiving accounts (subscribers) will be allowed to create their own flow using your content as the source. - /// This member is required. - public var subscribers: [Swift.String]? +extension CreateGatewayOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} - public init ( - dataTransferSubscriberFeePercent: Swift.Int? = nil, - description: Swift.String? = nil, - encryption: MediaConnectClientTypes.Encryption? = nil, - entitlementArn: Swift.String? = nil, - entitlementStatus: MediaConnectClientTypes.EntitlementStatus? = nil, - name: Swift.String? = nil, - subscribers: [Swift.String]? = nil - ) - { - self.dataTransferSubscriberFeePercent = dataTransferSubscriberFeePercent - self.description = description - self.encryption = encryption - self.entitlementArn = entitlementArn - self.entitlementStatus = entitlementStatus - self.name = name - self.subscribers = subscribers +extension CreateGatewayOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ConflictException" : self = .conflictException(try ConflictException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "CreateGateway420Exception" : self = .createGateway420Exception(try CreateGateway420Exception(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) } } +} +public enum CreateGatewayOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case conflictException(ConflictException) + case createGateway420Exception(CreateGateway420Exception) + case forbiddenException(ForbiddenException) + case internalServerErrorException(InternalServerErrorException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) } -extension MediaConnectClientTypes { - public enum EntitlementStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case disabled - case enabled - case sdkUnknown(Swift.String) - - public static var allCases: [EntitlementStatus] { - return [ - .disabled, - .enabled, - .sdkUnknown("") - ] - } - 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 - } - } - public init(from decoder: Swift.Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(RawValue.self) - self = EntitlementStatus(rawValue: rawValue) ?? EntitlementStatus.sdkUnknown(rawValue) +extension CreateGatewayOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: CreateGatewayOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.gateway = output.gateway + } else { + self.gateway = nil } } } -extension MediaConnectClientTypes.FailoverConfig: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case failoverMode = "failoverMode" - case recoveryWindow = "recoveryWindow" - case sourcePriority = "sourcePriority" - case state = "state" +public struct CreateGatewayOutputResponse: Swift.Equatable { + /// The settings for a gateway, including its networks. + public var gateway: MediaConnectClientTypes.Gateway? + + public init ( + gateway: MediaConnectClientTypes.Gateway? = nil + ) + { + self.gateway = gateway } +} - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let failoverMode = self.failoverMode { - try encodeContainer.encode(failoverMode.rawValue, forKey: .failoverMode) - } - if let recoveryWindow = self.recoveryWindow { - try encodeContainer.encode(recoveryWindow, forKey: .recoveryWindow) - } - if let sourcePriority = self.sourcePriority { - try encodeContainer.encode(sourcePriority, forKey: .sourcePriority) - } - if let state = self.state { - try encodeContainer.encode(state.rawValue, forKey: .state) - } +struct CreateGatewayOutputResponseBody: Swift.Equatable { + let gateway: MediaConnectClientTypes.Gateway? +} + +extension CreateGatewayOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case gateway = "gateway" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let failoverModeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.FailoverMode.self, forKey: .failoverMode) - failoverMode = failoverModeDecoded - let recoveryWindowDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .recoveryWindow) - recoveryWindow = recoveryWindowDecoded - let sourcePriorityDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.SourcePriority.self, forKey: .sourcePriority) - sourcePriority = sourcePriorityDecoded - let stateDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.State.self, forKey: .state) - state = stateDecoded + let gatewayDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Gateway.self, forKey: .gateway) + gateway = gatewayDecoded } } -extension MediaConnectClientTypes { - /// The settings for source failover. - public struct FailoverConfig: Swift.Equatable { - /// The type of failover you choose for this flow. MERGE combines the source streams into a single stream, allowing graceful recovery from any single-source loss. FAILOVER allows switching between different streams. - public var failoverMode: MediaConnectClientTypes.FailoverMode? - /// Search window time to look for dash-7 packets - public var recoveryWindow: Swift.Int? - /// The priority you want to assign to a source. You can have a primary stream and a backup stream or two equally prioritized streams. - public var sourcePriority: MediaConnectClientTypes.SourcePriority? - public var state: MediaConnectClientTypes.State? - - public init ( - failoverMode: MediaConnectClientTypes.FailoverMode? = nil, - recoveryWindow: Swift.Int? = nil, - sourcePriority: MediaConnectClientTypes.SourcePriority? = nil, - state: MediaConnectClientTypes.State? = nil - ) - { - self.failoverMode = failoverMode - self.recoveryWindow = recoveryWindow - self.sourcePriority = sourcePriority - self.state = state +extension DeleteBridgeInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let bridgeArn = bridgeArn else { + return nil } + return "/v1/bridges/\(bridgeArn.urlPercentEncoding())" } +} + +public struct DeleteBridgeInput: Swift.Equatable { + /// The ARN of the bridge that you want to delete. + /// This member is required. + public var bridgeArn: Swift.String? + public init ( + bridgeArn: Swift.String? = nil + ) + { + self.bridgeArn = bridgeArn + } } -extension MediaConnectClientTypes { - public enum FailoverMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case failover - case merge - case sdkUnknown(Swift.String) +struct DeleteBridgeInputBody: Swift.Equatable { +} - public static var allCases: [FailoverMode] { - return [ - .failover, - .merge, - .sdkUnknown("") - ] - } - 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 .failover: return "FAILOVER" - case .merge: return "MERGE" - case let .sdkUnknown(s): return s - } - } - public init(from decoder: Swift.Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(RawValue.self) - self = FailoverMode(rawValue: rawValue) ?? FailoverMode.sdkUnknown(rawValue) - } +extension DeleteBridgeInputBody: Swift.Decodable { + + public init (from decoder: Swift.Decoder) throws { } } -extension MediaConnectClientTypes.Flow: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case availabilityZone = "availabilityZone" - case description = "description" - case egressIp = "egressIp" - case entitlements = "entitlements" - case flowArn = "flowArn" - case maintenance = "maintenance" - case mediaStreams = "mediaStreams" - case name = "name" - case outputs = "outputs" - case source = "source" - case sourceFailoverConfig = "sourceFailoverConfig" - case sources = "sources" - case status = "status" - case vpcInterfaces = "vpcInterfaces" +extension DeleteBridgeOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) } +} - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let availabilityZone = self.availabilityZone { - try encodeContainer.encode(availabilityZone, forKey: .availabilityZone) - } - if let description = self.description { - try encodeContainer.encode(description, forKey: .description) - } - if let egressIp = self.egressIp { - try encodeContainer.encode(egressIp, forKey: .egressIp) - } - if let entitlements = entitlements { - var entitlementsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .entitlements) - for entitlement0 in entitlements { - try entitlementsContainer.encode(entitlement0) - } - } - if let flowArn = self.flowArn { - try encodeContainer.encode(flowArn, forKey: .flowArn) - } - if let maintenance = self.maintenance { - try encodeContainer.encode(maintenance, forKey: .maintenance) - } - if let mediaStreams = mediaStreams { - var mediaStreamsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .mediaStreams) - for mediastream0 in mediaStreams { - try mediaStreamsContainer.encode(mediastream0) - } - } - if let name = self.name { - try encodeContainer.encode(name, forKey: .name) - } - if let outputs = outputs { - var outputsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .outputs) - for output0 in outputs { - try outputsContainer.encode(output0) - } - } - if let source = self.source { - try encodeContainer.encode(source, forKey: .source) - } - if let sourceFailoverConfig = self.sourceFailoverConfig { - try encodeContainer.encode(sourceFailoverConfig, forKey: .sourceFailoverConfig) - } - if let sources = sources { - var sourcesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .sources) - for source0 in sources { - try sourcesContainer.encode(source0) - } - } - if let status = self.status { - try encodeContainer.encode(status.rawValue, forKey: .status) +extension DeleteBridgeOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ConflictException" : self = .conflictException(try ConflictException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) } - if let vpcInterfaces = vpcInterfaces { - var vpcInterfacesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .vpcInterfaces) - for vpcinterface0 in vpcInterfaces { - try vpcInterfacesContainer.encode(vpcinterface0) - } + } +} + +public enum DeleteBridgeOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case conflictException(ConflictException) + case forbiddenException(ForbiddenException) + case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) +} + +extension DeleteBridgeOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: DeleteBridgeOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.bridgeArn = output.bridgeArn + } else { + self.bridgeArn = nil } } +} + +public struct DeleteBridgeOutputResponse: Swift.Equatable { + /// The Amazon Resource Number (ARN) of the deleted bridge. + public var bridgeArn: Swift.String? + + public init ( + bridgeArn: Swift.String? = nil + ) + { + self.bridgeArn = bridgeArn + } +} + +struct DeleteBridgeOutputResponseBody: Swift.Equatable { + let bridgeArn: Swift.String? +} + +extension DeleteBridgeOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case bridgeArn = "bridgeArn" + } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let availabilityZoneDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .availabilityZone) - availabilityZone = availabilityZoneDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let egressIpDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .egressIp) - egressIp = egressIpDecoded - let entitlementsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.Entitlement?].self, forKey: .entitlements) - var entitlementsDecoded0:[MediaConnectClientTypes.Entitlement]? = nil - if let entitlementsContainer = entitlementsContainer { - entitlementsDecoded0 = [MediaConnectClientTypes.Entitlement]() - for structure0 in entitlementsContainer { - if let structure0 = structure0 { - entitlementsDecoded0?.append(structure0) - } - } - } - entitlements = entitlementsDecoded0 - let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) - flowArn = flowArnDecoded - let mediaStreamsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.MediaStream?].self, forKey: .mediaStreams) - var mediaStreamsDecoded0:[MediaConnectClientTypes.MediaStream]? = nil - if let mediaStreamsContainer = mediaStreamsContainer { - mediaStreamsDecoded0 = [MediaConnectClientTypes.MediaStream]() - for structure0 in mediaStreamsContainer { - if let structure0 = structure0 { - mediaStreamsDecoded0?.append(structure0) - } - } - } - mediaStreams = mediaStreamsDecoded0 - let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) - name = nameDecoded - let outputsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.Output?].self, forKey: .outputs) - var outputsDecoded0:[MediaConnectClientTypes.Output]? = nil - if let outputsContainer = outputsContainer { - outputsDecoded0 = [MediaConnectClientTypes.Output]() - for structure0 in outputsContainer { - if let structure0 = structure0 { - outputsDecoded0?.append(structure0) - } - } - } - outputs = outputsDecoded0 - let sourceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Source.self, forKey: .source) - source = sourceDecoded - let sourceFailoverConfigDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.FailoverConfig.self, forKey: .sourceFailoverConfig) - sourceFailoverConfig = sourceFailoverConfigDecoded - let sourcesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.Source?].self, forKey: .sources) - var sourcesDecoded0:[MediaConnectClientTypes.Source]? = nil - if let sourcesContainer = sourcesContainer { - sourcesDecoded0 = [MediaConnectClientTypes.Source]() - for structure0 in sourcesContainer { - if let structure0 = structure0 { - sourcesDecoded0?.append(structure0) - } - } - } - sources = sourcesDecoded0 - let statusDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Status.self, forKey: .status) - status = statusDecoded - let vpcInterfacesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.VpcInterface?].self, forKey: .vpcInterfaces) - var vpcInterfacesDecoded0:[MediaConnectClientTypes.VpcInterface]? = nil - if let vpcInterfacesContainer = vpcInterfacesContainer { - vpcInterfacesDecoded0 = [MediaConnectClientTypes.VpcInterface]() - for structure0 in vpcInterfacesContainer { - if let structure0 = structure0 { - vpcInterfacesDecoded0?.append(structure0) - } - } - } - vpcInterfaces = vpcInterfacesDecoded0 - let maintenanceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Maintenance.self, forKey: .maintenance) - maintenance = maintenanceDecoded + let bridgeArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .bridgeArn) + bridgeArn = bridgeArnDecoded } } -extension MediaConnectClientTypes { - /// The settings for a flow, including its source, outputs, and entitlements. - public struct Flow: Swift.Equatable { - /// The Availability Zone that you want to create the flow in. These options are limited to the Availability Zones within the current AWS. - /// This member is required. - public var availabilityZone: Swift.String? - /// A description of the flow. This value is not used or seen outside of the current AWS Elemental MediaConnect account. - public var description: Swift.String? - /// The IP address from which video will be sent to output destinations. - public var egressIp: Swift.String? - /// The entitlements in this flow. - /// This member is required. - public var entitlements: [MediaConnectClientTypes.Entitlement]? - /// The Amazon Resource Name (ARN), a unique identifier for any AWS resource, of the flow. - /// This member is required. - public var flowArn: Swift.String? - /// The maintenance setting of a flow - public var maintenance: MediaConnectClientTypes.Maintenance? - /// The media streams that are associated with the flow. After you associate a media stream with a source, you can also associate it with outputs on the flow. - public var mediaStreams: [MediaConnectClientTypes.MediaStream]? - /// The name of the flow. - /// This member is required. - public var name: Swift.String? - /// The outputs in this flow. - /// This member is required. - public var outputs: [MediaConnectClientTypes.Output]? - /// The settings for the source of the flow. - /// This member is required. - public var source: MediaConnectClientTypes.Source? - /// The settings for source failover. - public var sourceFailoverConfig: MediaConnectClientTypes.FailoverConfig? - public var sources: [MediaConnectClientTypes.Source]? - /// The current status of the flow. - /// This member is required. - public var status: MediaConnectClientTypes.Status? - /// The VPC Interfaces for this flow. - public var vpcInterfaces: [MediaConnectClientTypes.VpcInterface]? - - public init ( - availabilityZone: Swift.String? = nil, - description: Swift.String? = nil, - egressIp: Swift.String? = nil, - entitlements: [MediaConnectClientTypes.Entitlement]? = nil, - flowArn: Swift.String? = nil, - maintenance: MediaConnectClientTypes.Maintenance? = nil, - mediaStreams: [MediaConnectClientTypes.MediaStream]? = nil, - name: Swift.String? = nil, - outputs: [MediaConnectClientTypes.Output]? = nil, - source: MediaConnectClientTypes.Source? = nil, - sourceFailoverConfig: MediaConnectClientTypes.FailoverConfig? = nil, - sources: [MediaConnectClientTypes.Source]? = nil, - status: MediaConnectClientTypes.Status? = nil, - vpcInterfaces: [MediaConnectClientTypes.VpcInterface]? = nil - ) - { - self.availabilityZone = availabilityZone - self.description = description - self.egressIp = egressIp - self.entitlements = entitlements - self.flowArn = flowArn - self.maintenance = maintenance - self.mediaStreams = mediaStreams - self.name = name - self.outputs = outputs - self.source = source - self.sourceFailoverConfig = sourceFailoverConfig - self.sources = sources - self.status = status - self.vpcInterfaces = vpcInterfaces +extension DeleteFlowInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let flowArn = flowArn else { + return nil } + return "/v1/flows/\(flowArn.urlPercentEncoding())" } - } -extension MediaConnectClientTypes.Fmtp: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case channelOrder = "channelOrder" - case colorimetry = "colorimetry" - case exactFramerate = "exactFramerate" - case par = "par" - case range = "range" - case scanMode = "scanMode" - case tcs = "tcs" - } +public struct DeleteFlowInput: Swift.Equatable { + /// The ARN of the flow that you want to delete. + /// This member is required. + public var flowArn: Swift.String? - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let channelOrder = self.channelOrder { - try encodeContainer.encode(channelOrder, forKey: .channelOrder) - } - if let colorimetry = self.colorimetry { - try encodeContainer.encode(colorimetry.rawValue, forKey: .colorimetry) - } - if let exactFramerate = self.exactFramerate { - try encodeContainer.encode(exactFramerate, forKey: .exactFramerate) - } - if let par = self.par { - try encodeContainer.encode(par, forKey: .par) - } - if let range = self.range { - try encodeContainer.encode(range.rawValue, forKey: .range) - } - if let scanMode = self.scanMode { - try encodeContainer.encode(scanMode.rawValue, forKey: .scanMode) - } - if let tcs = self.tcs { - try encodeContainer.encode(tcs.rawValue, forKey: .tcs) - } + public init ( + flowArn: Swift.String? = nil + ) + { + self.flowArn = flowArn } +} + +struct DeleteFlowInputBody: Swift.Equatable { +} + +extension DeleteFlowInputBody: Swift.Decodable { public init (from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let channelOrderDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .channelOrder) - channelOrder = channelOrderDecoded - let colorimetryDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Colorimetry.self, forKey: .colorimetry) - colorimetry = colorimetryDecoded - let exactFramerateDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .exactFramerate) - exactFramerate = exactFramerateDecoded - let parDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .par) - par = parDecoded - let rangeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Range.self, forKey: .range) - range = rangeDecoded - let scanModeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ScanMode.self, forKey: .scanMode) - scanMode = scanModeDecoded - let tcsDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Tcs.self, forKey: .tcs) - tcs = tcsDecoded } } -extension MediaConnectClientTypes { - /// FMTP - public struct Fmtp: Swift.Equatable { - /// The format of the audio channel. - public var channelOrder: Swift.String? - /// The format that is used for the representation of color. - public var colorimetry: MediaConnectClientTypes.Colorimetry? - /// The frame rate for the video stream, in frames/second. For example: 60000/1001. If you specify a whole number, MediaConnect uses a ratio of N/1. For example, if you specify 60, MediaConnect uses 60/1 as the exactFramerate. - public var exactFramerate: Swift.String? - /// The pixel aspect ratio (PAR) of the video. - public var par: Swift.String? - /// The encoding range of the video. - public var range: MediaConnectClientTypes.Range? - /// The type of compression that was used to smooth the video’s appearance - public var scanMode: MediaConnectClientTypes.ScanMode? - /// The transfer characteristic system (TCS) that is used in the video. - public var tcs: MediaConnectClientTypes.Tcs? +extension DeleteFlowOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} - public init ( - channelOrder: Swift.String? = nil, - colorimetry: MediaConnectClientTypes.Colorimetry? = nil, - exactFramerate: Swift.String? = nil, - par: Swift.String? = nil, - range: MediaConnectClientTypes.Range? = nil, - scanMode: MediaConnectClientTypes.ScanMode? = nil, - tcs: MediaConnectClientTypes.Tcs? = nil - ) - { - self.channelOrder = channelOrder - self.colorimetry = colorimetry - self.exactFramerate = exactFramerate - self.par = par - self.range = range - self.scanMode = scanMode - self.tcs = tcs +extension DeleteFlowOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) } } - } -extension MediaConnectClientTypes.FmtpRequest: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case channelOrder = "channelOrder" - case colorimetry = "colorimetry" - case exactFramerate = "exactFramerate" - case par = "par" - case range = "range" - case scanMode = "scanMode" - case tcs = "tcs" - } +public enum DeleteFlowOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case forbiddenException(ForbiddenException) + case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) +} - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let channelOrder = self.channelOrder { - try encodeContainer.encode(channelOrder, forKey: .channelOrder) - } - if let colorimetry = self.colorimetry { - try encodeContainer.encode(colorimetry.rawValue, forKey: .colorimetry) - } - if let exactFramerate = self.exactFramerate { - try encodeContainer.encode(exactFramerate, forKey: .exactFramerate) - } - if let par = self.par { - try encodeContainer.encode(par, forKey: .par) - } - if let range = self.range { - try encodeContainer.encode(range.rawValue, forKey: .range) - } - if let scanMode = self.scanMode { - try encodeContainer.encode(scanMode.rawValue, forKey: .scanMode) - } - if let tcs = self.tcs { - try encodeContainer.encode(tcs.rawValue, forKey: .tcs) +extension DeleteFlowOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: DeleteFlowOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.flowArn = output.flowArn + self.status = output.status + } else { + self.flowArn = nil + self.status = nil } } +} + +public struct DeleteFlowOutputResponse: Swift.Equatable { + /// The ARN of the flow that was deleted. + public var flowArn: Swift.String? + /// The status of the flow when the DeleteFlow process begins. + public var status: MediaConnectClientTypes.Status? + + public init ( + flowArn: Swift.String? = nil, + status: MediaConnectClientTypes.Status? = nil + ) + { + self.flowArn = flowArn + self.status = status + } +} + +struct DeleteFlowOutputResponseBody: Swift.Equatable { + let flowArn: Swift.String? + let status: MediaConnectClientTypes.Status? +} + +extension DeleteFlowOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case flowArn = "flowArn" + case status = "status" + } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let channelOrderDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .channelOrder) - channelOrder = channelOrderDecoded - let colorimetryDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Colorimetry.self, forKey: .colorimetry) - colorimetry = colorimetryDecoded - let exactFramerateDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .exactFramerate) - exactFramerate = exactFramerateDecoded - let parDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .par) - par = parDecoded - let rangeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Range.self, forKey: .range) - range = rangeDecoded - let scanModeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ScanMode.self, forKey: .scanMode) - scanMode = scanModeDecoded - let tcsDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Tcs.self, forKey: .tcs) - tcs = tcsDecoded + let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) + flowArn = flowArnDecoded + let statusDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Status.self, forKey: .status) + status = statusDecoded } } -extension MediaConnectClientTypes { - /// The settings that you want to use to define the media stream. - public struct FmtpRequest: Swift.Equatable { - /// The format of the audio channel. - public var channelOrder: Swift.String? - /// The format that is used for the representation of color. - public var colorimetry: MediaConnectClientTypes.Colorimetry? - /// The frame rate for the video stream, in frames/second. For example: 60000/1001. If you specify a whole number, MediaConnect uses a ratio of N/1. For example, if you specify 60, MediaConnect uses 60/1 as the exactFramerate. - public var exactFramerate: Swift.String? - /// The pixel aspect ratio (PAR) of the video. - public var par: Swift.String? - /// The encoding range of the video. - public var range: MediaConnectClientTypes.Range? - /// The type of compression that was used to smooth the video’s appearance. - public var scanMode: MediaConnectClientTypes.ScanMode? - /// The transfer characteristic system (TCS) that is used in the video. - public var tcs: MediaConnectClientTypes.Tcs? +extension DeleteGatewayInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let gatewayArn = gatewayArn else { + return nil + } + return "/v1/gateways/\(gatewayArn.urlPercentEncoding())" + } +} - public init ( - channelOrder: Swift.String? = nil, - colorimetry: MediaConnectClientTypes.Colorimetry? = nil, - exactFramerate: Swift.String? = nil, - par: Swift.String? = nil, - range: MediaConnectClientTypes.Range? = nil, - scanMode: MediaConnectClientTypes.ScanMode? = nil, - tcs: MediaConnectClientTypes.Tcs? = nil - ) - { - self.channelOrder = channelOrder - self.colorimetry = colorimetry - self.exactFramerate = exactFramerate - self.par = par - self.range = range - self.scanMode = scanMode - self.tcs = tcs +public struct DeleteGatewayInput: Swift.Equatable { + /// The ARN of the gateway that you want to delete. + /// This member is required. + public var gatewayArn: Swift.String? + + public init ( + gatewayArn: Swift.String? = nil + ) + { + self.gatewayArn = gatewayArn + } +} + +struct DeleteGatewayInputBody: Swift.Equatable { +} + +extension DeleteGatewayInputBody: Swift.Decodable { + + public init (from decoder: Swift.Decoder) throws { + } +} + +extension DeleteGatewayOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} + +extension DeleteGatewayOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ConflictException" : self = .conflictException(try ConflictException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) } } +} +public enum DeleteGatewayOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case conflictException(ConflictException) + case forbiddenException(ForbiddenException) + case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) } -extension ForbiddenException { - public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { +extension DeleteGatewayOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { if case .stream(let reader) = httpResponse.body, let responseDecoder = decoder { let data = reader.toBytes().getData() - let output: ForbiddenExceptionBody = try responseDecoder.decode(responseBody: data) - self.message = output.message + let output: DeleteGatewayOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.gatewayArn = output.gatewayArn } else { - self.message = nil + self.gatewayArn = nil } - self._headers = httpResponse.headers - self._statusCode = httpResponse.statusCode - self._requestID = requestID - self._message = message } } -/// Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception. -public struct ForbiddenException: AWSClientRuntime.AWSHttpServiceError, Swift.Equatable { - public var _headers: ClientRuntime.Headers? - public var _statusCode: ClientRuntime.HttpStatusCode? - public var _message: Swift.String? - public var _requestID: Swift.String? - public var _retryable: Swift.Bool = false - public var _isThrottling: Swift.Bool = false - public var _type: ClientRuntime.ErrorType = .client - /// The error message returned by AWS Elemental MediaConnect. - /// This member is required. - public var message: Swift.String? +public struct DeleteGatewayOutputResponse: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the gateway that was deleted. + public var gatewayArn: Swift.String? public init ( - message: Swift.String? = nil + gatewayArn: Swift.String? = nil ) { - self.message = message + self.gatewayArn = gatewayArn } } -struct ForbiddenExceptionBody: Swift.Equatable { - let message: Swift.String? +struct DeleteGatewayOutputResponseBody: Swift.Equatable { + let gatewayArn: Swift.String? } -extension ForbiddenExceptionBody: Swift.Decodable { +extension DeleteGatewayOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case message = "message" + case gatewayArn = "gatewayArn" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) - message = messageDecoded + let gatewayArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .gatewayArn) + gatewayArn = gatewayArnDecoded } } -extension MediaConnectClientTypes.GrantEntitlementRequest: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case dataTransferSubscriberFeePercent = "dataTransferSubscriberFeePercent" - case description = "description" - case encryption = "encryption" - case entitlementStatus = "entitlementStatus" - case name = "name" - case subscribers = "subscribers" +extension DeregisterGatewayInstanceInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + if let force = force { + let forceQueryItem = ClientRuntime.URLQueryItem(name: "force".urlPercentEncoding(), value: Swift.String(force).urlPercentEncoding()) + items.append(forceQueryItem) + } + return items + } } +} - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let dataTransferSubscriberFeePercent = self.dataTransferSubscriberFeePercent { - try encodeContainer.encode(dataTransferSubscriberFeePercent, forKey: .dataTransferSubscriberFeePercent) - } - if let description = self.description { - try encodeContainer.encode(description, forKey: .description) - } - if let encryption = self.encryption { - try encodeContainer.encode(encryption, forKey: .encryption) - } - if let entitlementStatus = self.entitlementStatus { - try encodeContainer.encode(entitlementStatus.rawValue, forKey: .entitlementStatus) - } - if let name = self.name { - try encodeContainer.encode(name, forKey: .name) - } - if let subscribers = subscribers { - var subscribersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .subscribers) - for __string0 in subscribers { - try subscribersContainer.encode(__string0) - } +extension DeregisterGatewayInstanceInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let gatewayInstanceArn = gatewayInstanceArn else { + return nil } + return "/v1/gateway-instances/\(gatewayInstanceArn.urlPercentEncoding())" + } +} + +public struct DeregisterGatewayInstanceInput: Swift.Equatable { + /// Force the deregistration of an instance. Force will deregister an instance, even if there are bridges running on it. + public var force: Swift.Bool? + /// The Amazon Resource Name (ARN) of the gateway that contains the instance that you want to deregister. + /// This member is required. + public var gatewayInstanceArn: Swift.String? + + public init ( + force: Swift.Bool? = nil, + gatewayInstanceArn: Swift.String? = nil + ) + { + self.force = force + self.gatewayInstanceArn = gatewayInstanceArn } +} + +struct DeregisterGatewayInstanceInputBody: Swift.Equatable { +} + +extension DeregisterGatewayInstanceInputBody: Swift.Decodable { public init (from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let dataTransferSubscriberFeePercentDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .dataTransferSubscriberFeePercent) - dataTransferSubscriberFeePercent = dataTransferSubscriberFeePercentDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let encryptionDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Encryption.self, forKey: .encryption) - encryption = encryptionDecoded - let entitlementStatusDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.EntitlementStatus.self, forKey: .entitlementStatus) - entitlementStatus = entitlementStatusDecoded - let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) - name = nameDecoded - let subscribersContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .subscribers) - var subscribersDecoded0:[Swift.String]? = nil - if let subscribersContainer = subscribersContainer { - subscribersDecoded0 = [Swift.String]() - for string0 in subscribersContainer { - if let string0 = string0 { - subscribersDecoded0?.append(string0) - } - } - } - subscribers = subscribersDecoded0 } } -extension MediaConnectClientTypes { - /// The entitlements that you want to grant on a flow. - public struct GrantEntitlementRequest: Swift.Equatable { - /// Percentage from 0-100 of the data transfer cost to be billed to the subscriber. - public var dataTransferSubscriberFeePercent: Swift.Int? - /// A description of the entitlement. This description appears only on the AWS Elemental MediaConnect console and will not be seen by the subscriber or end user. - public var description: Swift.String? - /// The type of encryption that will be used on the output that is associated with this entitlement. - public var encryption: MediaConnectClientTypes.Encryption? - /// An indication of whether the new entitlement should be enabled or disabled as soon as it is created. If you don’t specify the entitlementStatus field in your request, MediaConnect sets it to ENABLED. - public var entitlementStatus: MediaConnectClientTypes.EntitlementStatus? - /// The name of the entitlement. This value must be unique within the current flow. - public var name: Swift.String? - /// The AWS account IDs that you want to share your content with. The receiving accounts (subscribers) will be allowed to create their own flows using your content as the source. - /// This member is required. - public var subscribers: [Swift.String]? +extension DeregisterGatewayInstanceOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} - public init ( - dataTransferSubscriberFeePercent: Swift.Int? = nil, - description: Swift.String? = nil, - encryption: MediaConnectClientTypes.Encryption? = nil, - entitlementStatus: MediaConnectClientTypes.EntitlementStatus? = nil, - name: Swift.String? = nil, - subscribers: [Swift.String]? = nil - ) - { - self.dataTransferSubscriberFeePercent = dataTransferSubscriberFeePercent - self.description = description - self.encryption = encryption - self.entitlementStatus = entitlementStatus - self.name = name - self.subscribers = subscribers +extension DeregisterGatewayInstanceOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ConflictException" : self = .conflictException(try ConflictException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) } } +} +public enum DeregisterGatewayInstanceOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case conflictException(ConflictException) + case forbiddenException(ForbiddenException) + case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) } -extension GrantFlowEntitlements420Exception { - public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { +extension DeregisterGatewayInstanceOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { if case .stream(let reader) = httpResponse.body, let responseDecoder = decoder { let data = reader.toBytes().getData() - let output: GrantFlowEntitlements420ExceptionBody = try responseDecoder.decode(responseBody: data) - self.message = output.message + let output: DeregisterGatewayInstanceOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.gatewayInstanceArn = output.gatewayInstanceArn + self.instanceState = output.instanceState } else { - self.message = nil + self.gatewayInstanceArn = nil + self.instanceState = nil } - self._headers = httpResponse.headers - self._statusCode = httpResponse.statusCode - self._requestID = requestID - self._message = message } } -/// Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception. -public struct GrantFlowEntitlements420Exception: AWSClientRuntime.AWSHttpServiceError, Swift.Equatable { - public var _headers: ClientRuntime.Headers? - public var _statusCode: ClientRuntime.HttpStatusCode? - public var _message: Swift.String? - public var _requestID: Swift.String? - public var _retryable: Swift.Bool = false - public var _isThrottling: Swift.Bool = false - public var _type: ClientRuntime.ErrorType = .client - /// The error message returned by AWS Elemental MediaConnect. - /// This member is required. - public var message: Swift.String? +public struct DeregisterGatewayInstanceOutputResponse: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the instance. + public var gatewayInstanceArn: Swift.String? + /// The status of the instance. + public var instanceState: MediaConnectClientTypes.InstanceState? public init ( - message: Swift.String? = nil + gatewayInstanceArn: Swift.String? = nil, + instanceState: MediaConnectClientTypes.InstanceState? = nil ) { - self.message = message + self.gatewayInstanceArn = gatewayInstanceArn + self.instanceState = instanceState } } -struct GrantFlowEntitlements420ExceptionBody: Swift.Equatable { - let message: Swift.String? +struct DeregisterGatewayInstanceOutputResponseBody: Swift.Equatable { + let gatewayInstanceArn: Swift.String? + let instanceState: MediaConnectClientTypes.InstanceState? } -extension GrantFlowEntitlements420ExceptionBody: Swift.Decodable { +extension DeregisterGatewayInstanceOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case message = "message" + case gatewayInstanceArn = "gatewayInstanceArn" + case instanceState = "instanceState" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) - message = messageDecoded - } -} - -extension GrantFlowEntitlementsInput: Swift.Encodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case entitlements = "entitlements" - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let entitlements = entitlements { - var entitlementsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .entitlements) - for grantentitlementrequest0 in entitlements { - try entitlementsContainer.encode(grantentitlementrequest0) - } - } + let gatewayInstanceArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .gatewayInstanceArn) + gatewayInstanceArn = gatewayInstanceArnDecoded + let instanceStateDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.InstanceState.self, forKey: .instanceState) + instanceState = instanceStateDecoded } } -extension GrantFlowEntitlementsInput: ClientRuntime.URLPathProvider { +extension DescribeBridgeInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let flowArn = flowArn else { + guard let bridgeArn = bridgeArn else { return nil } - return "/v1/flows/\(flowArn.urlPercentEncoding())/entitlements" + return "/v1/bridges/\(bridgeArn.urlPercentEncoding())" } } -/// A request to grant entitlements on a flow. -public struct GrantFlowEntitlementsInput: Swift.Equatable { - /// The list of entitlements that you want to grant. - /// This member is required. - public var entitlements: [MediaConnectClientTypes.GrantEntitlementRequest]? - /// The flow that you want to grant entitlements on. +public struct DescribeBridgeInput: Swift.Equatable { + /// The ARN of the bridge that you want to describe. /// This member is required. - public var flowArn: Swift.String? + public var bridgeArn: Swift.String? public init ( - entitlements: [MediaConnectClientTypes.GrantEntitlementRequest]? = nil, - flowArn: Swift.String? = nil + bridgeArn: Swift.String? = nil ) { - self.entitlements = entitlements - self.flowArn = flowArn + self.bridgeArn = bridgeArn } } -struct GrantFlowEntitlementsInputBody: Swift.Equatable { - let entitlements: [MediaConnectClientTypes.GrantEntitlementRequest]? +struct DescribeBridgeInputBody: Swift.Equatable { } -extension GrantFlowEntitlementsInputBody: Swift.Decodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case entitlements = "entitlements" - } +extension DescribeBridgeInputBody: Swift.Decodable { public init (from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let entitlementsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.GrantEntitlementRequest?].self, forKey: .entitlements) - var entitlementsDecoded0:[MediaConnectClientTypes.GrantEntitlementRequest]? = nil - if let entitlementsContainer = entitlementsContainer { - entitlementsDecoded0 = [MediaConnectClientTypes.GrantEntitlementRequest]() - for structure0 in entitlementsContainer { - if let structure0 = structure0 { - entitlementsDecoded0?.append(structure0) - } - } - } - entitlements = entitlementsDecoded0 } } -extension GrantFlowEntitlementsOutputError: ClientRuntime.HttpResponseBinding { +extension DescribeBridgeOutputError: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) @@ -3353,12 +3970,12 @@ extension GrantFlowEntitlementsOutputError: ClientRuntime.HttpResponseBinding { } } -extension GrantFlowEntitlementsOutputError { +extension DescribeBridgeOutputError { public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { switch errorType { case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ConflictException" : self = .conflictException(try ConflictException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "GrantFlowEntitlements420Exception" : self = .grantFlowEntitlements420Exception(try GrantFlowEntitlements420Exception(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) @@ -3368,10 +3985,10 @@ extension GrantFlowEntitlementsOutputError { } } -public enum GrantFlowEntitlementsOutputError: Swift.Error, Swift.Equatable { +public enum DescribeBridgeOutputError: Swift.Error, Swift.Equatable { case badRequestException(BadRequestException) + case conflictException(ConflictException) case forbiddenException(ForbiddenException) - case grantFlowEntitlements420Exception(GrantFlowEntitlements420Exception) case internalServerErrorException(InternalServerErrorException) case notFoundException(NotFoundException) case serviceUnavailableException(ServiceUnavailableException) @@ -3379,381 +3996,422 @@ public enum GrantFlowEntitlementsOutputError: Swift.Error, Swift.Equatable { case unknown(UnknownAWSHttpServiceError) } -extension GrantFlowEntitlementsOutputResponse: ClientRuntime.HttpResponseBinding { +extension DescribeBridgeOutputResponse: ClientRuntime.HttpResponseBinding { public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { if case .stream(let reader) = httpResponse.body, let responseDecoder = decoder { let data = reader.toBytes().getData() - let output: GrantFlowEntitlementsOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.entitlements = output.entitlements - self.flowArn = output.flowArn + let output: DescribeBridgeOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.bridge = output.bridge } else { - self.entitlements = nil - self.flowArn = nil + self.bridge = nil } } } -public struct GrantFlowEntitlementsOutputResponse: Swift.Equatable { - /// The entitlements that were just granted. - public var entitlements: [MediaConnectClientTypes.Entitlement]? - /// The ARN of the flow that these entitlements were granted to. - public var flowArn: Swift.String? +public struct DescribeBridgeOutputResponse: Swift.Equatable { + /// A Bridge is the connection between your datacenter's Instances and the AWS cloud. A bridge can be used to send video from the AWS cloud to your datacenter or from your datacenter to the AWS cloud. + public var bridge: MediaConnectClientTypes.Bridge? public init ( - entitlements: [MediaConnectClientTypes.Entitlement]? = nil, - flowArn: Swift.String? = nil + bridge: MediaConnectClientTypes.Bridge? = nil ) { - self.entitlements = entitlements - self.flowArn = flowArn + self.bridge = bridge } } -struct GrantFlowEntitlementsOutputResponseBody: Swift.Equatable { - let entitlements: [MediaConnectClientTypes.Entitlement]? - let flowArn: Swift.String? +struct DescribeBridgeOutputResponseBody: Swift.Equatable { + let bridge: MediaConnectClientTypes.Bridge? } -extension GrantFlowEntitlementsOutputResponseBody: Swift.Decodable { +extension DescribeBridgeOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case entitlements = "entitlements" - case flowArn = "flowArn" + case bridge = "bridge" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let entitlementsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.Entitlement?].self, forKey: .entitlements) - var entitlementsDecoded0:[MediaConnectClientTypes.Entitlement]? = nil - if let entitlementsContainer = entitlementsContainer { - entitlementsDecoded0 = [MediaConnectClientTypes.Entitlement]() - for structure0 in entitlementsContainer { - if let structure0 = structure0 { - entitlementsDecoded0?.append(structure0) - } - } - } - entitlements = entitlementsDecoded0 - let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) - flowArn = flowArnDecoded + let bridgeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Bridge.self, forKey: .bridge) + bridge = bridgeDecoded } } -extension MediaConnectClientTypes.InputConfiguration: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case inputIp = "inputIp" - case inputPort = "inputPort" - case interface = "interface" - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let inputIp = self.inputIp { - try encodeContainer.encode(inputIp, forKey: .inputIp) - } - if let inputPort = self.inputPort { - try encodeContainer.encode(inputPort, forKey: .inputPort) - } - if let interface = self.interface { - try encodeContainer.encode(interface, forKey: .interface) +extension DescribeFlowInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let flowArn = flowArn else { + return nil } - } - - public init (from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let inputIpDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .inputIp) - inputIp = inputIpDecoded - let inputPortDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .inputPort) - inputPort = inputPortDecoded - let interfaceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Interface.self, forKey: .interface) - interface = interfaceDecoded + return "/v1/flows/\(flowArn.urlPercentEncoding())" } } -extension MediaConnectClientTypes { - /// The transport parameters that are associated with an incoming media stream. - public struct InputConfiguration: Swift.Equatable { - /// The IP address that the flow listens on for incoming content for a media stream. - /// This member is required. - public var inputIp: Swift.String? - /// The port that the flow listens on for an incoming media stream. - /// This member is required. - public var inputPort: Swift.Int? - /// The VPC interface where the media stream comes in from. - /// This member is required. - public var interface: MediaConnectClientTypes.Interface? +public struct DescribeFlowInput: Swift.Equatable { + /// The ARN of the flow that you want to describe. + /// This member is required. + public var flowArn: Swift.String? - public init ( - inputIp: Swift.String? = nil, - inputPort: Swift.Int? = nil, - interface: MediaConnectClientTypes.Interface? = nil - ) - { - self.inputIp = inputIp - self.inputPort = inputPort - self.interface = interface - } + public init ( + flowArn: Swift.String? = nil + ) + { + self.flowArn = flowArn } +} +struct DescribeFlowInputBody: Swift.Equatable { } -extension MediaConnectClientTypes.InputConfigurationRequest: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case inputPort = "inputPort" - case interface = "interface" +extension DescribeFlowInputBody: Swift.Decodable { + + public init (from decoder: Swift.Decoder) throws { } +} - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let inputPort = self.inputPort { - try encodeContainer.encode(inputPort, forKey: .inputPort) - } - if let interface = self.interface { - try encodeContainer.encode(interface, forKey: .interface) - } +extension DescribeFlowOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) } +} - public init (from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let inputPortDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .inputPort) - inputPort = inputPortDecoded - let interfaceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.InterfaceRequest.self, forKey: .interface) - interface = interfaceDecoded +extension DescribeFlowOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + } } } -extension MediaConnectClientTypes { - /// The transport parameters that you want to associate with an incoming media stream. - public struct InputConfigurationRequest: Swift.Equatable { - /// The port that you want the flow to listen on for an incoming media stream. - /// This member is required. - public var inputPort: Swift.Int? - /// The VPC interface that you want to use for the incoming media stream. - /// This member is required. - public var interface: MediaConnectClientTypes.InterfaceRequest? +extension DescribeFlowOutputError: WaiterTypedError { - public init ( - inputPort: Swift.Int? = nil, - interface: MediaConnectClientTypes.InterfaceRequest? = nil - ) - { - self.inputPort = inputPort - self.interface = interface + /// The Smithy identifier, without namespace, for the type of this error, or `nil` if the + /// error has no known type. + public var waiterErrorType: String? { + switch self { + case .badRequestException: return "BadRequestException" + case .forbiddenException: return "ForbiddenException" + case .internalServerErrorException: return "InternalServerErrorException" + case .notFoundException: return "NotFoundException" + case .serviceUnavailableException: return "ServiceUnavailableException" + case .tooManyRequestsException: return "TooManyRequestsException" + case .unknown(let error): return error.waiterErrorType } } +} +public enum DescribeFlowOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case forbiddenException(ForbiddenException) + case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) } -extension MediaConnectClientTypes.Interface: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case name = "name" +extension DescribeFlowOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: DescribeFlowOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.flow = output.flow + self.messages = output.messages + } else { + self.flow = nil + self.messages = nil + } } +} - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let name = self.name { - try encodeContainer.encode(name, forKey: .name) - } +public struct DescribeFlowOutputResponse: Swift.Equatable { + /// The settings for a flow, including its source, outputs, and entitlements. + public var flow: MediaConnectClientTypes.Flow? + /// Messages that provide the state of the flow. + public var messages: MediaConnectClientTypes.Messages? + + public init ( + flow: MediaConnectClientTypes.Flow? = nil, + messages: MediaConnectClientTypes.Messages? = nil + ) + { + self.flow = flow + self.messages = messages + } +} + +struct DescribeFlowOutputResponseBody: Swift.Equatable { + let flow: MediaConnectClientTypes.Flow? + let messages: MediaConnectClientTypes.Messages? +} + +extension DescribeFlowOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case flow = "flow" + case messages = "messages" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) - name = nameDecoded + let flowDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Flow.self, forKey: .flow) + flow = flowDecoded + let messagesDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Messages.self, forKey: .messages) + messages = messagesDecoded } } -extension MediaConnectClientTypes { - /// The VPC interface that is used for the media stream associated with the source or output. - public struct Interface: Swift.Equatable { - /// The name of the VPC interface. - /// This member is required. - public var name: Swift.String? - - public init ( - name: Swift.String? = nil - ) - { - self.name = name +extension DescribeGatewayInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let gatewayArn = gatewayArn else { + return nil } + return "/v1/gateways/\(gatewayArn.urlPercentEncoding())" + } +} + +public struct DescribeGatewayInput: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the gateway that you want to describe. + /// This member is required. + public var gatewayArn: Swift.String? + + public init ( + gatewayArn: Swift.String? = nil + ) + { + self.gatewayArn = gatewayArn } +} +struct DescribeGatewayInputBody: Swift.Equatable { } -extension MediaConnectClientTypes.InterfaceRequest: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case name = "name" +extension DescribeGatewayInputBody: Swift.Decodable { + + public init (from decoder: Swift.Decoder) throws { } +} - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let name = self.name { - try encodeContainer.encode(name, forKey: .name) +extension DescribeGatewayInstanceInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let gatewayInstanceArn = gatewayInstanceArn else { + return nil } + return "/v1/gateway-instances/\(gatewayInstanceArn.urlPercentEncoding())" + } +} + +public struct DescribeGatewayInstanceInput: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the gateway instance that you want to describe. + /// This member is required. + public var gatewayInstanceArn: Swift.String? + + public init ( + gatewayInstanceArn: Swift.String? = nil + ) + { + self.gatewayInstanceArn = gatewayInstanceArn } +} + +struct DescribeGatewayInstanceInputBody: Swift.Equatable { +} + +extension DescribeGatewayInstanceInputBody: Swift.Decodable { public init (from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) - name = nameDecoded } } -extension MediaConnectClientTypes { - /// The VPC interface that you want to designate where the media stream is coming from or going to. - public struct InterfaceRequest: Swift.Equatable { - /// The name of the VPC interface. - /// This member is required. - public var name: Swift.String? +extension DescribeGatewayInstanceOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} - public init ( - name: Swift.String? = nil - ) - { - self.name = name +extension DescribeGatewayInstanceOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ConflictException" : self = .conflictException(try ConflictException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) } } +} +public enum DescribeGatewayInstanceOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case conflictException(ConflictException) + case forbiddenException(ForbiddenException) + case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) } -extension InternalServerErrorException { - public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { +extension DescribeGatewayInstanceOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { if case .stream(let reader) = httpResponse.body, let responseDecoder = decoder { let data = reader.toBytes().getData() - let output: InternalServerErrorExceptionBody = try responseDecoder.decode(responseBody: data) - self.message = output.message + let output: DescribeGatewayInstanceOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.gatewayInstance = output.gatewayInstance } else { - self.message = nil + self.gatewayInstance = nil } - self._headers = httpResponse.headers - self._statusCode = httpResponse.statusCode - self._requestID = requestID - self._message = message } } -/// Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception. -public struct InternalServerErrorException: AWSClientRuntime.AWSHttpServiceError, Swift.Equatable { - public var _headers: ClientRuntime.Headers? - public var _statusCode: ClientRuntime.HttpStatusCode? - public var _message: Swift.String? - public var _requestID: Swift.String? - public var _retryable: Swift.Bool = false - public var _isThrottling: Swift.Bool = false - public var _type: ClientRuntime.ErrorType = .server - /// The error message returned by AWS Elemental MediaConnect. - /// This member is required. - public var message: Swift.String? +public struct DescribeGatewayInstanceOutputResponse: Swift.Equatable { + /// The settings for an instance in a gateway. + public var gatewayInstance: MediaConnectClientTypes.GatewayInstance? public init ( - message: Swift.String? = nil + gatewayInstance: MediaConnectClientTypes.GatewayInstance? = nil ) { - self.message = message + self.gatewayInstance = gatewayInstance } } -struct InternalServerErrorExceptionBody: Swift.Equatable { - let message: Swift.String? +struct DescribeGatewayInstanceOutputResponseBody: Swift.Equatable { + let gatewayInstance: MediaConnectClientTypes.GatewayInstance? } -extension InternalServerErrorExceptionBody: Swift.Decodable { +extension DescribeGatewayInstanceOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case message = "message" + case gatewayInstance = "gatewayInstance" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) - message = messageDecoded + let gatewayInstanceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.GatewayInstance.self, forKey: .gatewayInstance) + gatewayInstance = gatewayInstanceDecoded } } -extension MediaConnectClientTypes { - public enum KeyType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case speke - case srtPassword - case staticKey - case sdkUnknown(Swift.String) +extension DescribeGatewayOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} - public static var allCases: [KeyType] { - return [ - .speke, - .srtPassword, - .staticKey, - .sdkUnknown("") - ] - } - 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 .speke: return "speke" - case .srtPassword: return "srt-password" - case .staticKey: return "static-key" - case let .sdkUnknown(s): return s - } - } - public init(from decoder: Swift.Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(RawValue.self) - self = KeyType(rawValue: rawValue) ?? KeyType.sdkUnknown(rawValue) +extension DescribeGatewayOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ConflictException" : self = .conflictException(try ConflictException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) } } } -extension ListEntitlementsInput: ClientRuntime.QueryItemProvider { - public var queryItems: [ClientRuntime.URLQueryItem] { - get throws { - var items = [ClientRuntime.URLQueryItem]() - if let nextToken = nextToken { - let nextTokenQueryItem = ClientRuntime.URLQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) - items.append(nextTokenQueryItem) - } - if let maxResults = maxResults { - let maxResultsQueryItem = ClientRuntime.URLQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) - items.append(maxResultsQueryItem) - } - return items +public enum DescribeGatewayOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case conflictException(ConflictException) + case forbiddenException(ForbiddenException) + case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) +} + +extension DescribeGatewayOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: DescribeGatewayOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.gateway = output.gateway + } else { + self.gateway = nil } } } -extension ListEntitlementsInput: ClientRuntime.URLPathProvider { +public struct DescribeGatewayOutputResponse: Swift.Equatable { + /// The settings for a gateway, including its networks. + public var gateway: MediaConnectClientTypes.Gateway? + + public init ( + gateway: MediaConnectClientTypes.Gateway? = nil + ) + { + self.gateway = gateway + } +} + +struct DescribeGatewayOutputResponseBody: Swift.Equatable { + let gateway: MediaConnectClientTypes.Gateway? +} + +extension DescribeGatewayOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case gateway = "gateway" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let gatewayDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Gateway.self, forKey: .gateway) + gateway = gatewayDecoded + } +} + +extension DescribeOfferingInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - return "/v1/entitlements" + guard let offeringArn = offeringArn else { + return nil + } + return "/v1/offerings/\(offeringArn.urlPercentEncoding())" } } -public struct ListEntitlementsInput: Swift.Equatable { - /// The maximum number of results to return per API request. For example, you submit a ListEntitlements request with MaxResults set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a NextToken value that you can use to fetch the next batch of results.) The service might return fewer results than the MaxResults value. If MaxResults is not included in the request, the service defaults to pagination with a maximum of 20 results per page. - public var maxResults: Swift.Int? - /// The token that identifies which batch of results that you want to see. For example, you submit a ListEntitlements request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListEntitlements request a second time and specify the NextToken value. - public var nextToken: Swift.String? +public struct DescribeOfferingInput: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the offering. + /// This member is required. + public var offeringArn: Swift.String? public init ( - maxResults: Swift.Int? = nil, - nextToken: Swift.String? = nil + offeringArn: Swift.String? = nil ) { - self.maxResults = maxResults - self.nextToken = nextToken + self.offeringArn = offeringArn } } -struct ListEntitlementsInputBody: Swift.Equatable { +struct DescribeOfferingInputBody: Swift.Equatable { } -extension ListEntitlementsInputBody: Swift.Decodable { +extension DescribeOfferingInputBody: Swift.Decodable { public init (from decoder: Swift.Decoder) throws { } } -extension ListEntitlementsOutputError: ClientRuntime.HttpResponseBinding { +extension DescribeOfferingOutputError: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) @@ -3761,11 +4419,12 @@ extension ListEntitlementsOutputError: ClientRuntime.HttpResponseBinding { } } -extension ListEntitlementsOutputError { +extension DescribeOfferingOutputError { public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { switch errorType { case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) @@ -3773,123 +4432,88 @@ extension ListEntitlementsOutputError { } } -public enum ListEntitlementsOutputError: Swift.Error, Swift.Equatable { +public enum DescribeOfferingOutputError: Swift.Error, Swift.Equatable { case badRequestException(BadRequestException) case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) case serviceUnavailableException(ServiceUnavailableException) case tooManyRequestsException(TooManyRequestsException) case unknown(UnknownAWSHttpServiceError) } -extension ListEntitlementsOutputResponse: ClientRuntime.HttpResponseBinding { +extension DescribeOfferingOutputResponse: ClientRuntime.HttpResponseBinding { public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { if case .stream(let reader) = httpResponse.body, let responseDecoder = decoder { let data = reader.toBytes().getData() - let output: ListEntitlementsOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.entitlements = output.entitlements - self.nextToken = output.nextToken + let output: DescribeOfferingOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.offering = output.offering } else { - self.entitlements = nil - self.nextToken = nil + self.offering = nil } } } -public struct ListEntitlementsOutputResponse: Swift.Equatable { - /// A list of entitlements that have been granted to you from other AWS accounts. - public var entitlements: [MediaConnectClientTypes.ListedEntitlement]? - /// The token that identifies which batch of results that you want to see. For example, you submit a ListEntitlements request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListEntitlements request a second time and specify the NextToken value. - public var nextToken: Swift.String? +public struct DescribeOfferingOutputResponse: Swift.Equatable { + /// A savings plan that reserves a certain amount of outbound bandwidth usage at a discounted rate each month over a period of time. + public var offering: MediaConnectClientTypes.Offering? public init ( - entitlements: [MediaConnectClientTypes.ListedEntitlement]? = nil, - nextToken: Swift.String? = nil + offering: MediaConnectClientTypes.Offering? = nil ) { - self.entitlements = entitlements - self.nextToken = nextToken + self.offering = offering } } -struct ListEntitlementsOutputResponseBody: Swift.Equatable { - let entitlements: [MediaConnectClientTypes.ListedEntitlement]? - let nextToken: Swift.String? +struct DescribeOfferingOutputResponseBody: Swift.Equatable { + let offering: MediaConnectClientTypes.Offering? } -extension ListEntitlementsOutputResponseBody: Swift.Decodable { +extension DescribeOfferingOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case entitlements = "entitlements" - case nextToken = "nextToken" + case offering = "offering" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let entitlementsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.ListedEntitlement?].self, forKey: .entitlements) - var entitlementsDecoded0:[MediaConnectClientTypes.ListedEntitlement]? = nil - if let entitlementsContainer = entitlementsContainer { - entitlementsDecoded0 = [MediaConnectClientTypes.ListedEntitlement]() - for structure0 in entitlementsContainer { - if let structure0 = structure0 { - entitlementsDecoded0?.append(structure0) - } - } - } - entitlements = entitlementsDecoded0 - let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) - nextToken = nextTokenDecoded - } -} - -extension ListFlowsInput: ClientRuntime.QueryItemProvider { - public var queryItems: [ClientRuntime.URLQueryItem] { - get throws { - var items = [ClientRuntime.URLQueryItem]() - if let nextToken = nextToken { - let nextTokenQueryItem = ClientRuntime.URLQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) - items.append(nextTokenQueryItem) - } - if let maxResults = maxResults { - let maxResultsQueryItem = ClientRuntime.URLQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) - items.append(maxResultsQueryItem) - } - return items - } + let offeringDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Offering.self, forKey: .offering) + offering = offeringDecoded } } -extension ListFlowsInput: ClientRuntime.URLPathProvider { +extension DescribeReservationInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - return "/v1/flows" + guard let reservationArn = reservationArn else { + return nil + } + return "/v1/reservations/\(reservationArn.urlPercentEncoding())" } } -public struct ListFlowsInput: Swift.Equatable { - /// The maximum number of results to return per API request. For example, you submit a ListFlows request with MaxResults set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a NextToken value that you can use to fetch the next batch of results.) The service might return fewer results than the MaxResults value. If MaxResults is not included in the request, the service defaults to pagination with a maximum of 10 results per page. - public var maxResults: Swift.Int? - /// The token that identifies which batch of results that you want to see. For example, you submit a ListFlows request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListFlows request a second time and specify the NextToken value. - public var nextToken: Swift.String? +public struct DescribeReservationInput: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the reservation. + /// This member is required. + public var reservationArn: Swift.String? public init ( - maxResults: Swift.Int? = nil, - nextToken: Swift.String? = nil + reservationArn: Swift.String? = nil ) { - self.maxResults = maxResults - self.nextToken = nextToken + self.reservationArn = reservationArn } } -struct ListFlowsInputBody: Swift.Equatable { +struct DescribeReservationInputBody: Swift.Equatable { } -extension ListFlowsInputBody: Swift.Decodable { +extension DescribeReservationInputBody: Swift.Decodable { public init (from decoder: Swift.Decoder) throws { } } -extension ListFlowsOutputError: ClientRuntime.HttpResponseBinding { +extension DescribeReservationOutputError: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) @@ -3897,11 +4521,12 @@ extension ListFlowsOutputError: ClientRuntime.HttpResponseBinding { } } -extension ListFlowsOutputError { +extension DescribeReservationOutputError { public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { switch errorType { case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) @@ -3909,458 +4534,581 @@ extension ListFlowsOutputError { } } -public enum ListFlowsOutputError: Swift.Error, Swift.Equatable { +public enum DescribeReservationOutputError: Swift.Error, Swift.Equatable { case badRequestException(BadRequestException) case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) case serviceUnavailableException(ServiceUnavailableException) case tooManyRequestsException(TooManyRequestsException) case unknown(UnknownAWSHttpServiceError) } -extension ListFlowsOutputResponse: ClientRuntime.HttpResponseBinding { +extension DescribeReservationOutputResponse: ClientRuntime.HttpResponseBinding { public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { if case .stream(let reader) = httpResponse.body, let responseDecoder = decoder { let data = reader.toBytes().getData() - let output: ListFlowsOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.flows = output.flows - self.nextToken = output.nextToken + let output: DescribeReservationOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.reservation = output.reservation } else { - self.flows = nil - self.nextToken = nil + self.reservation = nil } } } -public struct ListFlowsOutputResponse: Swift.Equatable { - /// A list of flow summaries. - public var flows: [MediaConnectClientTypes.ListedFlow]? - /// The token that identifies which batch of results that you want to see. For example, you submit a ListFlows request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListFlows request a second time and specify the NextToken value. - public var nextToken: Swift.String? +public struct DescribeReservationOutputResponse: Swift.Equatable { + /// A pricing agreement for a discounted rate for a specific outbound bandwidth that your MediaConnect account will use each month over a specific time period. The discounted rate in the reservation applies to outbound bandwidth for all flows from your account until your account reaches the amount of bandwidth in your reservation. If you use more outbound bandwidth than the agreed upon amount in a single month, the overage is charged at the on-demand rate. + public var reservation: MediaConnectClientTypes.Reservation? public init ( - flows: [MediaConnectClientTypes.ListedFlow]? = nil, - nextToken: Swift.String? = nil + reservation: MediaConnectClientTypes.Reservation? = nil ) { - self.flows = flows - self.nextToken = nextToken + self.reservation = reservation } } -struct ListFlowsOutputResponseBody: Swift.Equatable { - let flows: [MediaConnectClientTypes.ListedFlow]? - let nextToken: Swift.String? +struct DescribeReservationOutputResponseBody: Swift.Equatable { + let reservation: MediaConnectClientTypes.Reservation? } -extension ListFlowsOutputResponseBody: Swift.Decodable { +extension DescribeReservationOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case flows = "flows" - case nextToken = "nextToken" + case reservation = "reservation" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let flowsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.ListedFlow?].self, forKey: .flows) - var flowsDecoded0:[MediaConnectClientTypes.ListedFlow]? = nil - if let flowsContainer = flowsContainer { - flowsDecoded0 = [MediaConnectClientTypes.ListedFlow]() - for structure0 in flowsContainer { - if let structure0 = structure0 { - flowsDecoded0?.append(structure0) - } - } - } - flows = flowsDecoded0 - let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) - nextToken = nextTokenDecoded + let reservationDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Reservation.self, forKey: .reservation) + reservation = reservationDecoded } } -extension ListOfferingsInput: ClientRuntime.QueryItemProvider { - public var queryItems: [ClientRuntime.URLQueryItem] { - get throws { - var items = [ClientRuntime.URLQueryItem]() - if let nextToken = nextToken { - let nextTokenQueryItem = ClientRuntime.URLQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) - items.append(nextTokenQueryItem) - } - if let maxResults = maxResults { - let maxResultsQueryItem = ClientRuntime.URLQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) - items.append(maxResultsQueryItem) +extension MediaConnectClientTypes { + public enum DesiredState: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case active + case deleted + case standby + case sdkUnknown(Swift.String) + + public static var allCases: [DesiredState] { + return [ + .active, + .deleted, + .standby, + .sdkUnknown("") + ] + } + 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 .deleted: return "DELETED" + case .standby: return "STANDBY" + case let .sdkUnknown(s): return s } - return items + } + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = DesiredState(rawValue: rawValue) ?? DesiredState.sdkUnknown(rawValue) } } } -extension ListOfferingsInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - return "/v1/offerings" +extension MediaConnectClientTypes.DestinationConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case destinationIp = "destinationIp" + case destinationPort = "destinationPort" + case interface = "interface" + case outboundIp = "outboundIp" } -} -public struct ListOfferingsInput: Swift.Equatable { - /// The maximum number of results to return per API request. For example, you submit a ListOfferings request with MaxResults set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a NextToken value that you can use to fetch the next batch of results.) The service might return fewer results than the MaxResults value. If MaxResults is not included in the request, the service defaults to pagination with a maximum of 10 results per page. - public var maxResults: Swift.Int? - /// The token that identifies which batch of results that you want to see. For example, you submit a ListOfferings request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListOfferings request a second time and specify the NextToken value. - public var nextToken: Swift.String? - - public init ( - maxResults: Swift.Int? = nil, - nextToken: Swift.String? = nil - ) - { - self.maxResults = maxResults - self.nextToken = nextToken + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let destinationIp = self.destinationIp { + try encodeContainer.encode(destinationIp, forKey: .destinationIp) + } + if let destinationPort = self.destinationPort { + try encodeContainer.encode(destinationPort, forKey: .destinationPort) + } + if let interface = self.interface { + try encodeContainer.encode(interface, forKey: .interface) + } + if let outboundIp = self.outboundIp { + try encodeContainer.encode(outboundIp, forKey: .outboundIp) + } } -} -struct ListOfferingsInputBody: Swift.Equatable { + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let destinationIpDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .destinationIp) + destinationIp = destinationIpDecoded + let destinationPortDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .destinationPort) + destinationPort = destinationPortDecoded + let interfaceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Interface.self, forKey: .interface) + interface = interfaceDecoded + let outboundIpDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .outboundIp) + outboundIp = outboundIpDecoded + } } -extension ListOfferingsInputBody: Swift.Decodable { +extension MediaConnectClientTypes { + /// The transport parameters that are associated with an outbound media stream. + public struct DestinationConfiguration: Swift.Equatable { + /// The IP address where contents of the media stream will be sent. + /// This member is required. + public var destinationIp: Swift.String? + /// The port to use when the content of the media stream is distributed to the output. + /// This member is required. + public var destinationPort: Swift.Int? + /// The VPC interface that is used for the media stream associated with the output. + /// This member is required. + public var interface: MediaConnectClientTypes.Interface? + /// The IP address that the receiver requires in order to establish a connection with the flow. This value is represented by the elastic network interface IP address of the VPC. This field applies only to outputs that use the CDI or ST 2110 JPEG XS protocol. + /// This member is required. + public var outboundIp: Swift.String? - public init (from decoder: Swift.Decoder) throws { + public init ( + destinationIp: Swift.String? = nil, + destinationPort: Swift.Int? = nil, + interface: MediaConnectClientTypes.Interface? = nil, + outboundIp: Swift.String? = nil + ) + { + self.destinationIp = destinationIp + self.destinationPort = destinationPort + self.interface = interface + self.outboundIp = outboundIp + } } + } -extension ListOfferingsOutputError: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { - let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) - try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) +extension MediaConnectClientTypes.DestinationConfigurationRequest: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case destinationIp = "destinationIp" + case destinationPort = "destinationPort" + case interface = "interface" } -} -extension ListOfferingsOutputError { - public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { - switch errorType { - case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let destinationIp = self.destinationIp { + try encodeContainer.encode(destinationIp, forKey: .destinationIp) + } + if let destinationPort = self.destinationPort { + try encodeContainer.encode(destinationPort, forKey: .destinationPort) + } + if let interface = self.interface { + try encodeContainer.encode(interface, forKey: .interface) } } -} -public enum ListOfferingsOutputError: Swift.Error, Swift.Equatable { - case badRequestException(BadRequestException) - case internalServerErrorException(InternalServerErrorException) - case serviceUnavailableException(ServiceUnavailableException) - case tooManyRequestsException(TooManyRequestsException) - case unknown(UnknownAWSHttpServiceError) + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let destinationIpDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .destinationIp) + destinationIp = destinationIpDecoded + let destinationPortDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .destinationPort) + destinationPort = destinationPortDecoded + let interfaceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.InterfaceRequest.self, forKey: .interface) + interface = interfaceDecoded + } } -extension ListOfferingsOutputResponse: ClientRuntime.HttpResponseBinding { - public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { - if case .stream(let reader) = httpResponse.body, - let responseDecoder = decoder { - let data = reader.toBytes().getData() - let output: ListOfferingsOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.nextToken = output.nextToken - self.offerings = output.offerings - } else { - self.nextToken = nil - self.offerings = nil +extension MediaConnectClientTypes { + /// The transport parameters that you want to associate with an outbound media stream. + public struct DestinationConfigurationRequest: Swift.Equatable { + /// The IP address where you want MediaConnect to send contents of the media stream. + /// This member is required. + public var destinationIp: Swift.String? + /// The port that you want MediaConnect to use when it distributes the media stream to the output. + /// This member is required. + public var destinationPort: Swift.Int? + /// The VPC interface that you want to use for the media stream associated with the output. + /// This member is required. + public var interface: MediaConnectClientTypes.InterfaceRequest? + + public init ( + destinationIp: Swift.String? = nil, + destinationPort: Swift.Int? = nil, + interface: MediaConnectClientTypes.InterfaceRequest? = nil + ) + { + self.destinationIp = destinationIp + self.destinationPort = destinationPort + self.interface = interface } } + } -public struct ListOfferingsOutputResponse: Swift.Equatable { - /// The token that identifies which batch of results that you want to see. For example, you submit a ListOfferings request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListOfferings request a second time and specify the NextToken value. - public var nextToken: Swift.String? - /// A list of offerings that are available to this account in the current AWS Region. - public var offerings: [MediaConnectClientTypes.Offering]? +extension MediaConnectClientTypes { + public enum DurationUnits: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case months + case sdkUnknown(Swift.String) - public init ( - nextToken: Swift.String? = nil, - offerings: [MediaConnectClientTypes.Offering]? = nil - ) - { - self.nextToken = nextToken - self.offerings = offerings + public static var allCases: [DurationUnits] { + return [ + .months, + .sdkUnknown("") + ] + } + 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 .months: return "MONTHS" + case let .sdkUnknown(s): return s + } + } + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = DurationUnits(rawValue: rawValue) ?? DurationUnits.sdkUnknown(rawValue) + } } } -struct ListOfferingsOutputResponseBody: Swift.Equatable { - let nextToken: Swift.String? - let offerings: [MediaConnectClientTypes.Offering]? -} - -extension ListOfferingsOutputResponseBody: Swift.Decodable { +extension MediaConnectClientTypes.EgressGatewayBridge: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case nextToken = "nextToken" - case offerings = "offerings" + case instanceId = "instanceId" + case maxBitrate = "maxBitrate" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let instanceId = self.instanceId { + try encodeContainer.encode(instanceId, forKey: .instanceId) + } + if let maxBitrate = self.maxBitrate { + try encodeContainer.encode(maxBitrate, forKey: .maxBitrate) + } } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) - nextToken = nextTokenDecoded - let offeringsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.Offering?].self, forKey: .offerings) - var offeringsDecoded0:[MediaConnectClientTypes.Offering]? = nil - if let offeringsContainer = offeringsContainer { - offeringsDecoded0 = [MediaConnectClientTypes.Offering]() - for structure0 in offeringsContainer { - if let structure0 = structure0 { - offeringsDecoded0?.append(structure0) - } - } - } - offerings = offeringsDecoded0 + let instanceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .instanceId) + instanceId = instanceIdDecoded + let maxBitrateDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxBitrate) + maxBitrate = maxBitrateDecoded } } -extension ListReservationsInput: ClientRuntime.QueryItemProvider { - public var queryItems: [ClientRuntime.URLQueryItem] { - get throws { - var items = [ClientRuntime.URLQueryItem]() - if let nextToken = nextToken { - let nextTokenQueryItem = ClientRuntime.URLQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) - items.append(nextTokenQueryItem) - } - if let maxResults = maxResults { - let maxResultsQueryItem = ClientRuntime.URLQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) - items.append(maxResultsQueryItem) - } - return items +extension MediaConnectClientTypes { + public struct EgressGatewayBridge: Swift.Equatable { + /// The ID of the instance running this bridge. + public var instanceId: Swift.String? + /// The maximum expected bitrate (in bps) of the egress bridge. + /// This member is required. + public var maxBitrate: Swift.Int? + + public init ( + instanceId: Swift.String? = nil, + maxBitrate: Swift.Int? = nil + ) + { + self.instanceId = instanceId + self.maxBitrate = maxBitrate } } -} -extension ListReservationsInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - return "/v1/reservations" - } } -public struct ListReservationsInput: Swift.Equatable { - /// The maximum number of results to return per API request. For example, you submit a ListReservations request with MaxResults set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a NextToken value that you can use to fetch the next batch of results.) The service might return fewer results than the MaxResults value. If MaxResults is not included in the request, the service defaults to pagination with a maximum of 10 results per page. - public var maxResults: Swift.Int? - /// The token that identifies which batch of results that you want to see. For example, you submit a ListReservations request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListOfferings request a second time and specify the NextToken value. - public var nextToken: Swift.String? +extension MediaConnectClientTypes { + public enum EncoderProfile: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case high + case main + case sdkUnknown(Swift.String) - public init ( - maxResults: Swift.Int? = nil, - nextToken: Swift.String? = nil - ) - { - self.maxResults = maxResults - self.nextToken = nextToken + public static var allCases: [EncoderProfile] { + return [ + .high, + .main, + .sdkUnknown("") + ] + } + 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 .high: return "high" + case .main: return "main" + case let .sdkUnknown(s): return s + } + } + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = EncoderProfile(rawValue: rawValue) ?? EncoderProfile.sdkUnknown(rawValue) + } } } -struct ListReservationsInputBody: Swift.Equatable { -} - -extension ListReservationsInputBody: Swift.Decodable { +extension MediaConnectClientTypes { + public enum EncodingName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case jxsv + case pcm + case raw + case smpte291 + case sdkUnknown(Swift.String) - public init (from decoder: Swift.Decoder) throws { + public static var allCases: [EncodingName] { + return [ + .jxsv, + .pcm, + .raw, + .smpte291, + .sdkUnknown("") + ] + } + 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 .jxsv: return "jxsv" + case .pcm: return "pcm" + case .raw: return "raw" + case .smpte291: return "smpte291" + case let .sdkUnknown(s): return s + } + } + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = EncodingName(rawValue: rawValue) ?? EncodingName.sdkUnknown(rawValue) + } } } -extension ListReservationsOutputError: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { - let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) - try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) +extension MediaConnectClientTypes.EncodingParameters: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case compressionFactor = "compressionFactor" + case encoderProfile = "encoderProfile" } -} -extension ListReservationsOutputError { - public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { - switch errorType { - case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let compressionFactor = self.compressionFactor { + try encodeContainer.encode(compressionFactor, forKey: .compressionFactor) + } + if let encoderProfile = self.encoderProfile { + try encodeContainer.encode(encoderProfile.rawValue, forKey: .encoderProfile) } } -} - -public enum ListReservationsOutputError: Swift.Error, Swift.Equatable { - case badRequestException(BadRequestException) - case internalServerErrorException(InternalServerErrorException) - case serviceUnavailableException(ServiceUnavailableException) - case tooManyRequestsException(TooManyRequestsException) - case unknown(UnknownAWSHttpServiceError) -} -extension ListReservationsOutputResponse: ClientRuntime.HttpResponseBinding { - public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { - if case .stream(let reader) = httpResponse.body, - let responseDecoder = decoder { - let data = reader.toBytes().getData() - let output: ListReservationsOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.nextToken = output.nextToken - self.reservations = output.reservations - } else { - self.nextToken = nil - self.reservations = nil - } + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let compressionFactorDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .compressionFactor) + compressionFactor = compressionFactorDecoded + let encoderProfileDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.EncoderProfile.self, forKey: .encoderProfile) + encoderProfile = encoderProfileDecoded } } -public struct ListReservationsOutputResponse: Swift.Equatable { - /// The token that identifies which batch of results that you want to see. For example, you submit a ListReservations request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListReservations request a second time and specify the NextToken value. - public var nextToken: Swift.String? - /// A list of all reservations that have been purchased by this account in the current AWS Region. - public var reservations: [MediaConnectClientTypes.Reservation]? +extension MediaConnectClientTypes { + /// A collection of parameters that determine how MediaConnect will convert the content. These fields only apply to outputs on flows that have a CDI source. + public struct EncodingParameters: Swift.Equatable { + /// A value that is used to calculate compression for an output. The bitrate of the output is calculated as follows: Output bitrate = (1 / compressionFactor) * (source bitrate) This property only applies to outputs that use the ST 2110 JPEG XS protocol, with a flow source that uses the CDI protocol. Valid values are floating point numbers in the range of 3.0 to 10.0, inclusive. + /// This member is required. + public var compressionFactor: Swift.Double? + /// A setting on the encoder that drives compression settings. This property only applies to video media streams associated with outputs that use the ST 2110 JPEG XS protocol, with a flow source that uses the CDI protocol. + /// This member is required. + public var encoderProfile: MediaConnectClientTypes.EncoderProfile? - public init ( - nextToken: Swift.String? = nil, - reservations: [MediaConnectClientTypes.Reservation]? = nil - ) - { - self.nextToken = nextToken - self.reservations = reservations + public init ( + compressionFactor: Swift.Double? = nil, + encoderProfile: MediaConnectClientTypes.EncoderProfile? = nil + ) + { + self.compressionFactor = compressionFactor + self.encoderProfile = encoderProfile + } } -} -struct ListReservationsOutputResponseBody: Swift.Equatable { - let nextToken: Swift.String? - let reservations: [MediaConnectClientTypes.Reservation]? } -extension ListReservationsOutputResponseBody: Swift.Decodable { +extension MediaConnectClientTypes.EncodingParametersRequest: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case nextToken = "nextToken" - case reservations = "reservations" + case compressionFactor = "compressionFactor" + case encoderProfile = "encoderProfile" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let compressionFactor = self.compressionFactor { + try encodeContainer.encode(compressionFactor, forKey: .compressionFactor) + } + if let encoderProfile = self.encoderProfile { + try encodeContainer.encode(encoderProfile.rawValue, forKey: .encoderProfile) + } } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) - nextToken = nextTokenDecoded - let reservationsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.Reservation?].self, forKey: .reservations) - var reservationsDecoded0:[MediaConnectClientTypes.Reservation]? = nil - if let reservationsContainer = reservationsContainer { - reservationsDecoded0 = [MediaConnectClientTypes.Reservation]() - for structure0 in reservationsContainer { - if let structure0 = structure0 { - reservationsDecoded0?.append(structure0) - } - } - } - reservations = reservationsDecoded0 + let compressionFactorDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .compressionFactor) + compressionFactor = compressionFactorDecoded + let encoderProfileDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.EncoderProfile.self, forKey: .encoderProfile) + encoderProfile = encoderProfileDecoded } } -extension ListTagsForResourceInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let resourceArn = resourceArn else { - return nil +extension MediaConnectClientTypes { + /// A collection of parameters that determine how MediaConnect will convert the content. These fields only apply to outputs on flows that have a CDI source. + public struct EncodingParametersRequest: Swift.Equatable { + /// A value that is used to calculate compression for an output. The bitrate of the output is calculated as follows: Output bitrate = (1 / compressionFactor) * (source bitrate) This property only applies to outputs that use the ST 2110 JPEG XS protocol, with a flow source that uses the CDI protocol. Valid values are floating point numbers in the range of 3.0 to 10.0, inclusive. + /// This member is required. + public var compressionFactor: Swift.Double? + /// A setting on the encoder that drives compression settings. This property only applies to video media streams associated with outputs that use the ST 2110 JPEG XS protocol, if at least one source on the flow uses the CDI protocol. + /// This member is required. + public var encoderProfile: MediaConnectClientTypes.EncoderProfile? + + public init ( + compressionFactor: Swift.Double? = nil, + encoderProfile: MediaConnectClientTypes.EncoderProfile? = nil + ) + { + self.compressionFactor = compressionFactor + self.encoderProfile = encoderProfile } - return "/tags/\(resourceArn.urlPercentEncoding())" } + } -public struct ListTagsForResourceInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) that identifies the AWS Elemental MediaConnect resource for which to list the tags. - /// This member is required. - public var resourceArn: Swift.String? - - public init ( - resourceArn: Swift.String? = nil - ) - { - self.resourceArn = resourceArn - } -} - -struct ListTagsForResourceInputBody: Swift.Equatable { -} - -extension ListTagsForResourceInputBody: Swift.Decodable { - - public init (from decoder: Swift.Decoder) throws { - } -} - -extension ListTagsForResourceOutputError: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { - let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) - try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) +extension MediaConnectClientTypes.Encryption: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case algorithm = "algorithm" + case constantInitializationVector = "constantInitializationVector" + case deviceId = "deviceId" + case keyType = "keyType" + case region = "region" + case resourceId = "resourceId" + case roleArn = "roleArn" + case secretArn = "secretArn" + case url = "url" } -} -extension ListTagsForResourceOutputError { - public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { - switch errorType { - case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let algorithm = self.algorithm { + try encodeContainer.encode(algorithm.rawValue, forKey: .algorithm) } - } -} - -public enum ListTagsForResourceOutputError: Swift.Error, Swift.Equatable { - case badRequestException(BadRequestException) - case internalServerErrorException(InternalServerErrorException) - case notFoundException(NotFoundException) - case unknown(UnknownAWSHttpServiceError) -} - -extension ListTagsForResourceOutputResponse: ClientRuntime.HttpResponseBinding { - public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { - if case .stream(let reader) = httpResponse.body, - let responseDecoder = decoder { - let data = reader.toBytes().getData() - let output: ListTagsForResourceOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.tags = output.tags - } else { - self.tags = nil + if let constantInitializationVector = self.constantInitializationVector { + try encodeContainer.encode(constantInitializationVector, forKey: .constantInitializationVector) + } + if let deviceId = self.deviceId { + try encodeContainer.encode(deviceId, forKey: .deviceId) + } + if let keyType = self.keyType { + try encodeContainer.encode(keyType.rawValue, forKey: .keyType) + } + if let region = self.region { + try encodeContainer.encode(region, forKey: .region) + } + if let resourceId = self.resourceId { + try encodeContainer.encode(resourceId, forKey: .resourceId) + } + if let roleArn = self.roleArn { + try encodeContainer.encode(roleArn, forKey: .roleArn) + } + if let secretArn = self.secretArn { + try encodeContainer.encode(secretArn, forKey: .secretArn) + } + if let url = self.url { + try encodeContainer.encode(url, forKey: .url) } } -} - -public struct ListTagsForResourceOutputResponse: Swift.Equatable { - /// A map from tag keys to values. Tag keys can have a maximum character length of 128 characters, and tag values can have a maximum length of 256 characters. - public var tags: [Swift.String:Swift.String]? - public init ( - tags: [Swift.String:Swift.String]? = nil - ) - { - self.tags = tags + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let algorithmDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Algorithm.self, forKey: .algorithm) + algorithm = algorithmDecoded + let constantInitializationVectorDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .constantInitializationVector) + constantInitializationVector = constantInitializationVectorDecoded + let deviceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .deviceId) + deviceId = deviceIdDecoded + let keyTypeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.KeyType.self, forKey: .keyType) + keyType = keyTypeDecoded + let regionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .region) + region = regionDecoded + let resourceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceId) + resourceId = resourceIdDecoded + let roleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .roleArn) + roleArn = roleArnDecoded + let secretArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .secretArn) + secretArn = secretArnDecoded + let urlDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .url) + url = urlDecoded } } -struct ListTagsForResourceOutputResponseBody: Swift.Equatable { - let tags: [Swift.String:Swift.String]? -} - -extension ListTagsForResourceOutputResponseBody: Swift.Decodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case tags = "tags" - } +extension MediaConnectClientTypes { + /// Information about the encryption of the flow. + public struct Encryption: Swift.Equatable { + /// The type of algorithm that is used for the encryption (such as aes128, aes192, or aes256). + public var algorithm: MediaConnectClientTypes.Algorithm? + /// A 128-bit, 16-byte hex value represented by a 32-character string, to be used with the key for encrypting content. This parameter is not valid for static key encryption. + public var constantInitializationVector: Swift.String? + /// The value of one of the devices that you configured with your digital rights management (DRM) platform key provider. This parameter is required for SPEKE encryption and is not valid for static key encryption. + public var deviceId: Swift.String? + /// The type of key that is used for the encryption. If no keyType is provided, the service will use the default setting (static-key). + public var keyType: MediaConnectClientTypes.KeyType? + /// The AWS Region that the API Gateway proxy endpoint was created in. This parameter is required for SPEKE encryption and is not valid for static key encryption. + public var region: Swift.String? + /// An identifier for the content. The service sends this value to the key server to identify the current endpoint. The resource ID is also known as the content ID. This parameter is required for SPEKE encryption and is not valid for static key encryption. + public var resourceId: Swift.String? + /// The ARN of the role that you created during setup (when you set up AWS Elemental MediaConnect as a trusted entity). + /// This member is required. + public var roleArn: Swift.String? + /// The ARN of the secret that you created in AWS Secrets Manager to store the encryption key. This parameter is required for static key encryption and is not valid for SPEKE encryption. + public var secretArn: Swift.String? + /// The URL from the API Gateway proxy that you set up to talk to your key server. This parameter is required for SPEKE encryption and is not valid for static key encryption. + public var url: Swift.String? - public init (from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let tagsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .tags) - var tagsDecoded0: [Swift.String:Swift.String]? = nil - if let tagsContainer = tagsContainer { - tagsDecoded0 = [Swift.String:Swift.String]() - for (key0, __string0) in tagsContainer { - if let __string0 = __string0 { - tagsDecoded0?[key0] = __string0 - } - } + public init ( + algorithm: MediaConnectClientTypes.Algorithm? = nil, + constantInitializationVector: Swift.String? = nil, + deviceId: Swift.String? = nil, + keyType: MediaConnectClientTypes.KeyType? = nil, + region: Swift.String? = nil, + resourceId: Swift.String? = nil, + roleArn: Swift.String? = nil, + secretArn: Swift.String? = nil, + url: Swift.String? = nil + ) + { + self.algorithm = algorithm + self.constantInitializationVector = constantInitializationVector + self.deviceId = deviceId + self.keyType = keyType + self.region = region + self.resourceId = resourceId + self.roleArn = roleArn + self.secretArn = secretArn + self.url = url } - tags = tagsDecoded0 } + } -extension MediaConnectClientTypes.ListedEntitlement: Swift.Codable { +extension MediaConnectClientTypes.Entitlement: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case dataTransferSubscriberFeePercent = "dataTransferSubscriberFeePercent" + case description = "description" + case encryption = "encryption" case entitlementArn = "entitlementArn" - case entitlementName = "entitlementName" + case entitlementStatus = "entitlementStatus" + case name = "name" + case subscribers = "subscribers" } public func encode(to encoder: Swift.Encoder) throws { @@ -4368,11 +5116,26 @@ extension MediaConnectClientTypes.ListedEntitlement: Swift.Codable { if let dataTransferSubscriberFeePercent = self.dataTransferSubscriberFeePercent { try encodeContainer.encode(dataTransferSubscriberFeePercent, forKey: .dataTransferSubscriberFeePercent) } + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let encryption = self.encryption { + try encodeContainer.encode(encryption, forKey: .encryption) + } if let entitlementArn = self.entitlementArn { try encodeContainer.encode(entitlementArn, forKey: .entitlementArn) } - if let entitlementName = self.entitlementName { - try encodeContainer.encode(entitlementName, forKey: .entitlementName) + if let entitlementStatus = self.entitlementStatus { + try encodeContainer.encode(entitlementStatus.rawValue, forKey: .entitlementStatus) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let subscribers = subscribers { + var subscribersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .subscribers) + for __string0 in subscribers { + try subscribersContainer.encode(__string0) + } } } @@ -4380,225 +5143,179 @@ extension MediaConnectClientTypes.ListedEntitlement: Swift.Codable { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let dataTransferSubscriberFeePercentDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .dataTransferSubscriberFeePercent) dataTransferSubscriberFeePercent = dataTransferSubscriberFeePercentDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let encryptionDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Encryption.self, forKey: .encryption) + encryption = encryptionDecoded let entitlementArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .entitlementArn) entitlementArn = entitlementArnDecoded - let entitlementNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .entitlementName) - entitlementName = entitlementNameDecoded + let entitlementStatusDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.EntitlementStatus.self, forKey: .entitlementStatus) + entitlementStatus = entitlementStatusDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let subscribersContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .subscribers) + var subscribersDecoded0:[Swift.String]? = nil + if let subscribersContainer = subscribersContainer { + subscribersDecoded0 = [Swift.String]() + for string0 in subscribersContainer { + if let string0 = string0 { + subscribersDecoded0?.append(string0) + } + } + } + subscribers = subscribersDecoded0 } } extension MediaConnectClientTypes { - /// An entitlement that has been granted to you from other AWS accounts. - public struct ListedEntitlement: Swift.Equatable { + /// The settings for a flow entitlement. + public struct Entitlement: Swift.Equatable { /// Percentage from 0-100 of the data transfer cost to be billed to the subscriber. public var dataTransferSubscriberFeePercent: Swift.Int? + /// A description of the entitlement. + public var description: Swift.String? + /// The type of encryption that will be used on the output that is associated with this entitlement. + public var encryption: MediaConnectClientTypes.Encryption? /// The ARN of the entitlement. /// This member is required. public var entitlementArn: Swift.String? + /// An indication of whether the entitlement is enabled. + public var entitlementStatus: MediaConnectClientTypes.EntitlementStatus? /// The name of the entitlement. /// This member is required. - public var entitlementName: Swift.String? + public var name: Swift.String? + /// The AWS account IDs that you want to share your content with. The receiving accounts (subscribers) will be allowed to create their own flow using your content as the source. + /// This member is required. + public var subscribers: [Swift.String]? public init ( dataTransferSubscriberFeePercent: Swift.Int? = nil, + description: Swift.String? = nil, + encryption: MediaConnectClientTypes.Encryption? = nil, entitlementArn: Swift.String? = nil, - entitlementName: Swift.String? = nil + entitlementStatus: MediaConnectClientTypes.EntitlementStatus? = nil, + name: Swift.String? = nil, + subscribers: [Swift.String]? = nil ) { self.dataTransferSubscriberFeePercent = dataTransferSubscriberFeePercent - self.entitlementArn = entitlementArn - self.entitlementName = entitlementName + self.description = description + self.encryption = encryption + self.entitlementArn = entitlementArn + self.entitlementStatus = entitlementStatus + self.name = name + self.subscribers = subscribers } } } -extension MediaConnectClientTypes.ListedFlow: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case availabilityZone = "availabilityZone" - case description = "description" - case flowArn = "flowArn" - case maintenance = "maintenance" - case name = "name" - case sourceType = "sourceType" - case status = "status" - } +extension MediaConnectClientTypes { + public enum EntitlementStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case disabled + case enabled + case sdkUnknown(Swift.String) - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let availabilityZone = self.availabilityZone { - try encodeContainer.encode(availabilityZone, forKey: .availabilityZone) - } - if let description = self.description { - try encodeContainer.encode(description, forKey: .description) - } - if let flowArn = self.flowArn { - try encodeContainer.encode(flowArn, forKey: .flowArn) - } - if let maintenance = self.maintenance { - try encodeContainer.encode(maintenance, forKey: .maintenance) - } - if let name = self.name { - try encodeContainer.encode(name, forKey: .name) + public static var allCases: [EntitlementStatus] { + return [ + .disabled, + .enabled, + .sdkUnknown("") + ] } - if let sourceType = self.sourceType { - try encodeContainer.encode(sourceType.rawValue, forKey: .sourceType) + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) } - if let status = self.status { - try encodeContainer.encode(status.rawValue, forKey: .status) + public var rawValue: Swift.String { + switch self { + case .disabled: return "DISABLED" + case .enabled: return "ENABLED" + case let .sdkUnknown(s): return s + } } - } - - public init (from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let availabilityZoneDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .availabilityZone) - availabilityZone = availabilityZoneDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) - flowArn = flowArnDecoded - let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) - name = nameDecoded - let sourceTypeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.SourceType.self, forKey: .sourceType) - sourceType = sourceTypeDecoded - let statusDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Status.self, forKey: .status) - status = statusDecoded - let maintenanceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Maintenance.self, forKey: .maintenance) - maintenance = maintenanceDecoded - } -} - -extension MediaConnectClientTypes { - /// Provides a summary of a flow, including its ARN, Availability Zone, and source type. - public struct ListedFlow: Swift.Equatable { - /// The Availability Zone that the flow was created in. - /// This member is required. - public var availabilityZone: Swift.String? - /// A description of the flow. - /// This member is required. - public var description: Swift.String? - /// The ARN of the flow. - /// This member is required. - public var flowArn: Swift.String? - /// The maintenance setting of a flow - public var maintenance: MediaConnectClientTypes.Maintenance? - /// The name of the flow. - /// This member is required. - public var name: Swift.String? - /// The type of source. This value is either owned (originated somewhere other than an AWS Elemental MediaConnect flow owned by another AWS account) or entitled (originated at an AWS Elemental MediaConnect flow owned by another AWS account). - /// This member is required. - public var sourceType: MediaConnectClientTypes.SourceType? - /// The current status of the flow. - /// This member is required. - public var status: MediaConnectClientTypes.Status? - - public init ( - availabilityZone: Swift.String? = nil, - description: Swift.String? = nil, - flowArn: Swift.String? = nil, - maintenance: MediaConnectClientTypes.Maintenance? = nil, - name: Swift.String? = nil, - sourceType: MediaConnectClientTypes.SourceType? = nil, - status: MediaConnectClientTypes.Status? = nil - ) - { - self.availabilityZone = availabilityZone - self.description = description - self.flowArn = flowArn - self.maintenance = maintenance - self.name = name - self.sourceType = sourceType - self.status = status + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = EntitlementStatus(rawValue: rawValue) ?? EntitlementStatus.sdkUnknown(rawValue) } } - } -extension MediaConnectClientTypes.Maintenance: Swift.Codable { +extension MediaConnectClientTypes.FailoverConfig: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case maintenanceDay = "maintenanceDay" - case maintenanceDeadline = "maintenanceDeadline" - case maintenanceScheduledDate = "maintenanceScheduledDate" - case maintenanceStartHour = "maintenanceStartHour" + case failoverMode = "failoverMode" + case recoveryWindow = "recoveryWindow" + case sourcePriority = "sourcePriority" + case state = "state" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let maintenanceDay = self.maintenanceDay { - try encodeContainer.encode(maintenanceDay.rawValue, forKey: .maintenanceDay) + if let failoverMode = self.failoverMode { + try encodeContainer.encode(failoverMode.rawValue, forKey: .failoverMode) } - if let maintenanceDeadline = self.maintenanceDeadline { - try encodeContainer.encode(maintenanceDeadline, forKey: .maintenanceDeadline) + if let recoveryWindow = self.recoveryWindow { + try encodeContainer.encode(recoveryWindow, forKey: .recoveryWindow) } - if let maintenanceScheduledDate = self.maintenanceScheduledDate { - try encodeContainer.encode(maintenanceScheduledDate, forKey: .maintenanceScheduledDate) + if let sourcePriority = self.sourcePriority { + try encodeContainer.encode(sourcePriority, forKey: .sourcePriority) } - if let maintenanceStartHour = self.maintenanceStartHour { - try encodeContainer.encode(maintenanceStartHour, forKey: .maintenanceStartHour) + if let state = self.state { + try encodeContainer.encode(state.rawValue, forKey: .state) } } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let maintenanceDayDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.MaintenanceDay.self, forKey: .maintenanceDay) - maintenanceDay = maintenanceDayDecoded - let maintenanceDeadlineDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .maintenanceDeadline) - maintenanceDeadline = maintenanceDeadlineDecoded - let maintenanceScheduledDateDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .maintenanceScheduledDate) - maintenanceScheduledDate = maintenanceScheduledDateDecoded - let maintenanceStartHourDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .maintenanceStartHour) - maintenanceStartHour = maintenanceStartHourDecoded + let failoverModeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.FailoverMode.self, forKey: .failoverMode) + failoverMode = failoverModeDecoded + let recoveryWindowDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .recoveryWindow) + recoveryWindow = recoveryWindowDecoded + let sourcePriorityDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.SourcePriority.self, forKey: .sourcePriority) + sourcePriority = sourcePriorityDecoded + let stateDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.State.self, forKey: .state) + state = stateDecoded } } extension MediaConnectClientTypes { - /// The maintenance setting of a flow - public struct Maintenance: Swift.Equatable { - /// A day of a week when the maintenance will happen. Use Monday/Tuesday/Wednesday/Thursday/Friday/Saturday/Sunday. - public var maintenanceDay: MediaConnectClientTypes.MaintenanceDay? - /// The Maintenance has to be performed before this deadline in ISO UTC format. Example: 2021-01-30T08:30:00Z. - public var maintenanceDeadline: Swift.String? - /// A scheduled date in ISO UTC format when the maintenance will happen. Use YYYY-MM-DD format. Example: 2021-01-30. - public var maintenanceScheduledDate: Swift.String? - /// UTC time when the maintenance will happen. Use 24-hour HH:MM format. Minutes must be 00. Example: 13:00. The default value is 02:00. - public var maintenanceStartHour: Swift.String? + /// The settings for source failover. + public struct FailoverConfig: Swift.Equatable { + /// The type of failover you choose for this flow. MERGE combines the source streams into a single stream, allowing graceful recovery from any single-source loss. FAILOVER allows switching between different streams. + public var failoverMode: MediaConnectClientTypes.FailoverMode? + /// Search window time to look for dash-7 packets + public var recoveryWindow: Swift.Int? + /// The priority you want to assign to a source. You can have a primary stream and a backup stream or two equally prioritized streams. + public var sourcePriority: MediaConnectClientTypes.SourcePriority? + public var state: MediaConnectClientTypes.State? public init ( - maintenanceDay: MediaConnectClientTypes.MaintenanceDay? = nil, - maintenanceDeadline: Swift.String? = nil, - maintenanceScheduledDate: Swift.String? = nil, - maintenanceStartHour: Swift.String? = nil + failoverMode: MediaConnectClientTypes.FailoverMode? = nil, + recoveryWindow: Swift.Int? = nil, + sourcePriority: MediaConnectClientTypes.SourcePriority? = nil, + state: MediaConnectClientTypes.State? = nil ) { - self.maintenanceDay = maintenanceDay - self.maintenanceDeadline = maintenanceDeadline - self.maintenanceScheduledDate = maintenanceScheduledDate - self.maintenanceStartHour = maintenanceStartHour + self.failoverMode = failoverMode + self.recoveryWindow = recoveryWindow + self.sourcePriority = sourcePriority + self.state = state } } } extension MediaConnectClientTypes { - public enum MaintenanceDay: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case friday - case monday - case saturday - case sunday - case thursday - case tuesday - case wednesday + public enum FailoverMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case failover + case merge case sdkUnknown(Swift.String) - public static var allCases: [MaintenanceDay] { + public static var allCases: [FailoverMode] { return [ - .friday, - .monday, - .saturday, - .sunday, - .thursday, - .tuesday, - .wednesday, + .failover, + .merge, .sdkUnknown("") ] } @@ -4608,532 +5325,852 @@ extension MediaConnectClientTypes { } public var rawValue: Swift.String { switch self { - case .friday: return "Friday" - case .monday: return "Monday" - case .saturday: return "Saturday" - case .sunday: return "Sunday" - case .thursday: return "Thursday" - case .tuesday: return "Tuesday" - case .wednesday: return "Wednesday" + case .failover: return "FAILOVER" + case .merge: return "MERGE" case let .sdkUnknown(s): return s } } public init(from decoder: Swift.Decoder) throws { let container = try decoder.singleValueContainer() let rawValue = try container.decode(RawValue.self) - self = MaintenanceDay(rawValue: rawValue) ?? MaintenanceDay.sdkUnknown(rawValue) + self = FailoverMode(rawValue: rawValue) ?? FailoverMode.sdkUnknown(rawValue) } } } -extension MediaConnectClientTypes.MediaStream: Swift.Codable { +extension MediaConnectClientTypes.Flow: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case attributes = "attributes" - case clockRate = "clockRate" + case availabilityZone = "availabilityZone" case description = "description" - case fmt = "fmt" - case mediaStreamId = "mediaStreamId" - case mediaStreamName = "mediaStreamName" - case mediaStreamType = "mediaStreamType" - case videoFormat = "videoFormat" + case egressIp = "egressIp" + case entitlements = "entitlements" + case flowArn = "flowArn" + case maintenance = "maintenance" + case mediaStreams = "mediaStreams" + case name = "name" + case outputs = "outputs" + case source = "source" + case sourceFailoverConfig = "sourceFailoverConfig" + case sources = "sources" + case status = "status" + case vpcInterfaces = "vpcInterfaces" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let attributes = self.attributes { - try encodeContainer.encode(attributes, forKey: .attributes) - } - if let clockRate = self.clockRate { - try encodeContainer.encode(clockRate, forKey: .clockRate) + if let availabilityZone = self.availabilityZone { + try encodeContainer.encode(availabilityZone, forKey: .availabilityZone) } if let description = self.description { try encodeContainer.encode(description, forKey: .description) } - if let fmt = self.fmt { - try encodeContainer.encode(fmt, forKey: .fmt) + if let egressIp = self.egressIp { + try encodeContainer.encode(egressIp, forKey: .egressIp) } - if let mediaStreamId = self.mediaStreamId { - try encodeContainer.encode(mediaStreamId, forKey: .mediaStreamId) + if let entitlements = entitlements { + var entitlementsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .entitlements) + for entitlement0 in entitlements { + try entitlementsContainer.encode(entitlement0) + } } - if let mediaStreamName = self.mediaStreamName { - try encodeContainer.encode(mediaStreamName, forKey: .mediaStreamName) + if let flowArn = self.flowArn { + try encodeContainer.encode(flowArn, forKey: .flowArn) } - if let mediaStreamType = self.mediaStreamType { - try encodeContainer.encode(mediaStreamType.rawValue, forKey: .mediaStreamType) + if let maintenance = self.maintenance { + try encodeContainer.encode(maintenance, forKey: .maintenance) } - if let videoFormat = self.videoFormat { - try encodeContainer.encode(videoFormat, forKey: .videoFormat) + if let mediaStreams = mediaStreams { + var mediaStreamsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .mediaStreams) + for mediastream0 in mediaStreams { + try mediaStreamsContainer.encode(mediastream0) + } + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let outputs = outputs { + var outputsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .outputs) + for output0 in outputs { + try outputsContainer.encode(output0) + } + } + if let source = self.source { + try encodeContainer.encode(source, forKey: .source) + } + if let sourceFailoverConfig = self.sourceFailoverConfig { + try encodeContainer.encode(sourceFailoverConfig, forKey: .sourceFailoverConfig) + } + if let sources = sources { + var sourcesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .sources) + for source0 in sources { + try sourcesContainer.encode(source0) + } + } + if let status = self.status { + try encodeContainer.encode(status.rawValue, forKey: .status) + } + if let vpcInterfaces = vpcInterfaces { + var vpcInterfacesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .vpcInterfaces) + for vpcinterface0 in vpcInterfaces { + try vpcInterfacesContainer.encode(vpcinterface0) + } } } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let attributesDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.MediaStreamAttributes.self, forKey: .attributes) - attributes = attributesDecoded - let clockRateDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .clockRate) - clockRate = clockRateDecoded + let availabilityZoneDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .availabilityZone) + availabilityZone = availabilityZoneDecoded let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) description = descriptionDecoded - let fmtDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .fmt) - fmt = fmtDecoded - let mediaStreamIdDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .mediaStreamId) - mediaStreamId = mediaStreamIdDecoded - let mediaStreamNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .mediaStreamName) - mediaStreamName = mediaStreamNameDecoded - let mediaStreamTypeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.MediaStreamType.self, forKey: .mediaStreamType) - mediaStreamType = mediaStreamTypeDecoded - let videoFormatDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .videoFormat) - videoFormat = videoFormatDecoded + let egressIpDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .egressIp) + egressIp = egressIpDecoded + let entitlementsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.Entitlement?].self, forKey: .entitlements) + var entitlementsDecoded0:[MediaConnectClientTypes.Entitlement]? = nil + if let entitlementsContainer = entitlementsContainer { + entitlementsDecoded0 = [MediaConnectClientTypes.Entitlement]() + for structure0 in entitlementsContainer { + if let structure0 = structure0 { + entitlementsDecoded0?.append(structure0) + } + } + } + entitlements = entitlementsDecoded0 + let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) + flowArn = flowArnDecoded + let mediaStreamsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.MediaStream?].self, forKey: .mediaStreams) + var mediaStreamsDecoded0:[MediaConnectClientTypes.MediaStream]? = nil + if let mediaStreamsContainer = mediaStreamsContainer { + mediaStreamsDecoded0 = [MediaConnectClientTypes.MediaStream]() + for structure0 in mediaStreamsContainer { + if let structure0 = structure0 { + mediaStreamsDecoded0?.append(structure0) + } + } + } + mediaStreams = mediaStreamsDecoded0 + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let outputsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.Output?].self, forKey: .outputs) + var outputsDecoded0:[MediaConnectClientTypes.Output]? = nil + if let outputsContainer = outputsContainer { + outputsDecoded0 = [MediaConnectClientTypes.Output]() + for structure0 in outputsContainer { + if let structure0 = structure0 { + outputsDecoded0?.append(structure0) + } + } + } + outputs = outputsDecoded0 + let sourceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Source.self, forKey: .source) + source = sourceDecoded + let sourceFailoverConfigDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.FailoverConfig.self, forKey: .sourceFailoverConfig) + sourceFailoverConfig = sourceFailoverConfigDecoded + let sourcesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.Source?].self, forKey: .sources) + var sourcesDecoded0:[MediaConnectClientTypes.Source]? = nil + if let sourcesContainer = sourcesContainer { + sourcesDecoded0 = [MediaConnectClientTypes.Source]() + for structure0 in sourcesContainer { + if let structure0 = structure0 { + sourcesDecoded0?.append(structure0) + } + } + } + sources = sourcesDecoded0 + let statusDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Status.self, forKey: .status) + status = statusDecoded + let vpcInterfacesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.VpcInterface?].self, forKey: .vpcInterfaces) + var vpcInterfacesDecoded0:[MediaConnectClientTypes.VpcInterface]? = nil + if let vpcInterfacesContainer = vpcInterfacesContainer { + vpcInterfacesDecoded0 = [MediaConnectClientTypes.VpcInterface]() + for structure0 in vpcInterfacesContainer { + if let structure0 = structure0 { + vpcInterfacesDecoded0?.append(structure0) + } + } + } + vpcInterfaces = vpcInterfacesDecoded0 + let maintenanceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Maintenance.self, forKey: .maintenance) + maintenance = maintenanceDecoded } } extension MediaConnectClientTypes { - /// A single track or stream of media that contains video, audio, or ancillary data. After you add a media stream to a flow, you can associate it with sources and outputs on that flow, as long as they use the CDI protocol or the ST 2110 JPEG XS protocol. Each source or output can consist of one or many media streams. - public struct MediaStream: Swift.Equatable { - /// Attributes that are related to the media stream. - public var attributes: MediaConnectClientTypes.MediaStreamAttributes? - /// The sample rate for the stream. This value is measured in Hz. - public var clockRate: Swift.Int? - /// A description that can help you quickly identify what your media stream is used for. + /// The settings for a flow, including its source, outputs, and entitlements. + public struct Flow: Swift.Equatable { + /// The Availability Zone that you want to create the flow in. These options are limited to the Availability Zones within the current AWS. + /// This member is required. + public var availabilityZone: Swift.String? + /// A description of the flow. This value is not used or seen outside of the current AWS Elemental MediaConnect account. public var description: Swift.String? - /// The format type number (sometimes referred to as RTP payload type) of the media stream. MediaConnect assigns this value to the media stream. For ST 2110 JPEG XS outputs, you need to provide this value to the receiver. + /// The IP address from which video will be sent to output destinations. + public var egressIp: Swift.String? + /// The entitlements in this flow. /// This member is required. - public var fmt: Swift.Int? - /// A unique identifier for the media stream. + public var entitlements: [MediaConnectClientTypes.Entitlement]? + /// The Amazon Resource Name (ARN) of the flow. /// This member is required. - public var mediaStreamId: Swift.Int? - /// A name that helps you distinguish one media stream from another. + public var flowArn: Swift.String? + /// The maintenance setting of a flow + public var maintenance: MediaConnectClientTypes.Maintenance? + /// The media streams that are associated with the flow. After you associate a media stream with a source, you can also associate it with outputs on the flow. + public var mediaStreams: [MediaConnectClientTypes.MediaStream]? + /// The name of the flow. /// This member is required. - public var mediaStreamName: Swift.String? - /// The type of media stream. + public var name: Swift.String? + /// The outputs in this flow. /// This member is required. - public var mediaStreamType: MediaConnectClientTypes.MediaStreamType? - /// The resolution of the video. - public var videoFormat: Swift.String? + public var outputs: [MediaConnectClientTypes.Output]? + /// The settings for the source of the flow. + /// This member is required. + public var source: MediaConnectClientTypes.Source? + /// The settings for source failover. + public var sourceFailoverConfig: MediaConnectClientTypes.FailoverConfig? + public var sources: [MediaConnectClientTypes.Source]? + /// The current status of the flow. + /// This member is required. + public var status: MediaConnectClientTypes.Status? + /// The VPC Interfaces for this flow. + public var vpcInterfaces: [MediaConnectClientTypes.VpcInterface]? public init ( - attributes: MediaConnectClientTypes.MediaStreamAttributes? = nil, - clockRate: Swift.Int? = nil, + availabilityZone: Swift.String? = nil, description: Swift.String? = nil, - fmt: Swift.Int? = nil, - mediaStreamId: Swift.Int? = nil, - mediaStreamName: Swift.String? = nil, - mediaStreamType: MediaConnectClientTypes.MediaStreamType? = nil, - videoFormat: Swift.String? = nil + egressIp: Swift.String? = nil, + entitlements: [MediaConnectClientTypes.Entitlement]? = nil, + flowArn: Swift.String? = nil, + maintenance: MediaConnectClientTypes.Maintenance? = nil, + mediaStreams: [MediaConnectClientTypes.MediaStream]? = nil, + name: Swift.String? = nil, + outputs: [MediaConnectClientTypes.Output]? = nil, + source: MediaConnectClientTypes.Source? = nil, + sourceFailoverConfig: MediaConnectClientTypes.FailoverConfig? = nil, + sources: [MediaConnectClientTypes.Source]? = nil, + status: MediaConnectClientTypes.Status? = nil, + vpcInterfaces: [MediaConnectClientTypes.VpcInterface]? = nil ) { - self.attributes = attributes - self.clockRate = clockRate + self.availabilityZone = availabilityZone self.description = description - self.fmt = fmt - self.mediaStreamId = mediaStreamId - self.mediaStreamName = mediaStreamName - self.mediaStreamType = mediaStreamType - self.videoFormat = videoFormat + self.egressIp = egressIp + self.entitlements = entitlements + self.flowArn = flowArn + self.maintenance = maintenance + self.mediaStreams = mediaStreams + self.name = name + self.outputs = outputs + self.source = source + self.sourceFailoverConfig = sourceFailoverConfig + self.sources = sources + self.status = status + self.vpcInterfaces = vpcInterfaces } } } -extension MediaConnectClientTypes.MediaStreamAttributes: Swift.Codable { +extension MediaConnectClientTypes.Fmtp: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case fmtp = "fmtp" - case lang = "lang" + case channelOrder = "channelOrder" + case colorimetry = "colorimetry" + case exactFramerate = "exactFramerate" + case par = "par" + case range = "range" + case scanMode = "scanMode" + case tcs = "tcs" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let fmtp = self.fmtp { - try encodeContainer.encode(fmtp, forKey: .fmtp) + if let channelOrder = self.channelOrder { + try encodeContainer.encode(channelOrder, forKey: .channelOrder) } - if let lang = self.lang { - try encodeContainer.encode(lang, forKey: .lang) + if let colorimetry = self.colorimetry { + try encodeContainer.encode(colorimetry.rawValue, forKey: .colorimetry) } - } - + if let exactFramerate = self.exactFramerate { + try encodeContainer.encode(exactFramerate, forKey: .exactFramerate) + } + if let par = self.par { + try encodeContainer.encode(par, forKey: .par) + } + if let range = self.range { + try encodeContainer.encode(range.rawValue, forKey: .range) + } + if let scanMode = self.scanMode { + try encodeContainer.encode(scanMode.rawValue, forKey: .scanMode) + } + if let tcs = self.tcs { + try encodeContainer.encode(tcs.rawValue, forKey: .tcs) + } + } + public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let fmtpDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Fmtp.self, forKey: .fmtp) - fmtp = fmtpDecoded - let langDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lang) - lang = langDecoded + let channelOrderDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .channelOrder) + channelOrder = channelOrderDecoded + let colorimetryDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Colorimetry.self, forKey: .colorimetry) + colorimetry = colorimetryDecoded + let exactFramerateDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .exactFramerate) + exactFramerate = exactFramerateDecoded + let parDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .par) + par = parDecoded + let rangeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Range.self, forKey: .range) + range = rangeDecoded + let scanModeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ScanMode.self, forKey: .scanMode) + scanMode = scanModeDecoded + let tcsDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Tcs.self, forKey: .tcs) + tcs = tcsDecoded } } extension MediaConnectClientTypes { - /// Attributes that are related to the media stream. - public struct MediaStreamAttributes: Swift.Equatable { - /// A set of parameters that define the media stream. - /// This member is required. - public var fmtp: MediaConnectClientTypes.Fmtp? - /// The audio language, in a format that is recognized by the receiver. - public var lang: Swift.String? + /// FMTP + public struct Fmtp: Swift.Equatable { + /// The format of the audio channel. + public var channelOrder: Swift.String? + /// The format that is used for the representation of color. + public var colorimetry: MediaConnectClientTypes.Colorimetry? + /// The frame rate for the video stream, in frames/second. For example: 60000/1001. If you specify a whole number, MediaConnect uses a ratio of N/1. For example, if you specify 60, MediaConnect uses 60/1 as the exactFramerate. + public var exactFramerate: Swift.String? + /// The pixel aspect ratio (PAR) of the video. + public var par: Swift.String? + /// The encoding range of the video. + public var range: MediaConnectClientTypes.Range? + /// The type of compression that was used to smooth the video’s appearance + public var scanMode: MediaConnectClientTypes.ScanMode? + /// The transfer characteristic system (TCS) that is used in the video. + public var tcs: MediaConnectClientTypes.Tcs? public init ( - fmtp: MediaConnectClientTypes.Fmtp? = nil, - lang: Swift.String? = nil + channelOrder: Swift.String? = nil, + colorimetry: MediaConnectClientTypes.Colorimetry? = nil, + exactFramerate: Swift.String? = nil, + par: Swift.String? = nil, + range: MediaConnectClientTypes.Range? = nil, + scanMode: MediaConnectClientTypes.ScanMode? = nil, + tcs: MediaConnectClientTypes.Tcs? = nil ) { - self.fmtp = fmtp - self.lang = lang + self.channelOrder = channelOrder + self.colorimetry = colorimetry + self.exactFramerate = exactFramerate + self.par = par + self.range = range + self.scanMode = scanMode + self.tcs = tcs } } } -extension MediaConnectClientTypes.MediaStreamAttributesRequest: Swift.Codable { +extension MediaConnectClientTypes.FmtpRequest: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case fmtp = "fmtp" - case lang = "lang" + case channelOrder = "channelOrder" + case colorimetry = "colorimetry" + case exactFramerate = "exactFramerate" + case par = "par" + case range = "range" + case scanMode = "scanMode" + case tcs = "tcs" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let fmtp = self.fmtp { - try encodeContainer.encode(fmtp, forKey: .fmtp) + if let channelOrder = self.channelOrder { + try encodeContainer.encode(channelOrder, forKey: .channelOrder) } - if let lang = self.lang { - try encodeContainer.encode(lang, forKey: .lang) + if let colorimetry = self.colorimetry { + try encodeContainer.encode(colorimetry.rawValue, forKey: .colorimetry) + } + if let exactFramerate = self.exactFramerate { + try encodeContainer.encode(exactFramerate, forKey: .exactFramerate) + } + if let par = self.par { + try encodeContainer.encode(par, forKey: .par) + } + if let range = self.range { + try encodeContainer.encode(range.rawValue, forKey: .range) + } + if let scanMode = self.scanMode { + try encodeContainer.encode(scanMode.rawValue, forKey: .scanMode) + } + if let tcs = self.tcs { + try encodeContainer.encode(tcs.rawValue, forKey: .tcs) } } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let fmtpDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.FmtpRequest.self, forKey: .fmtp) - fmtp = fmtpDecoded - let langDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lang) - lang = langDecoded + let channelOrderDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .channelOrder) + channelOrder = channelOrderDecoded + let colorimetryDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Colorimetry.self, forKey: .colorimetry) + colorimetry = colorimetryDecoded + let exactFramerateDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .exactFramerate) + exactFramerate = exactFramerateDecoded + let parDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .par) + par = parDecoded + let rangeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Range.self, forKey: .range) + range = rangeDecoded + let scanModeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ScanMode.self, forKey: .scanMode) + scanMode = scanModeDecoded + let tcsDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Tcs.self, forKey: .tcs) + tcs = tcsDecoded } } extension MediaConnectClientTypes { - /// Attributes that are related to the media stream. - public struct MediaStreamAttributesRequest: Swift.Equatable { - /// The settings that you want to use to define the media stream. - public var fmtp: MediaConnectClientTypes.FmtpRequest? - /// The audio language, in a format that is recognized by the receiver. - public var lang: Swift.String? + /// The settings that you want to use to define the media stream. + public struct FmtpRequest: Swift.Equatable { + /// The format of the audio channel. + public var channelOrder: Swift.String? + /// The format that is used for the representation of color. + public var colorimetry: MediaConnectClientTypes.Colorimetry? + /// The frame rate for the video stream, in frames/second. For example: 60000/1001. If you specify a whole number, MediaConnect uses a ratio of N/1. For example, if you specify 60, MediaConnect uses 60/1 as the exactFramerate. + public var exactFramerate: Swift.String? + /// The pixel aspect ratio (PAR) of the video. + public var par: Swift.String? + /// The encoding range of the video. + public var range: MediaConnectClientTypes.Range? + /// The type of compression that was used to smooth the video’s appearance. + public var scanMode: MediaConnectClientTypes.ScanMode? + /// The transfer characteristic system (TCS) that is used in the video. + public var tcs: MediaConnectClientTypes.Tcs? public init ( - fmtp: MediaConnectClientTypes.FmtpRequest? = nil, - lang: Swift.String? = nil + channelOrder: Swift.String? = nil, + colorimetry: MediaConnectClientTypes.Colorimetry? = nil, + exactFramerate: Swift.String? = nil, + par: Swift.String? = nil, + range: MediaConnectClientTypes.Range? = nil, + scanMode: MediaConnectClientTypes.ScanMode? = nil, + tcs: MediaConnectClientTypes.Tcs? = nil ) { - self.fmtp = fmtp - self.lang = lang + self.channelOrder = channelOrder + self.colorimetry = colorimetry + self.exactFramerate = exactFramerate + self.par = par + self.range = range + self.scanMode = scanMode + self.tcs = tcs } } } -extension MediaConnectClientTypes.MediaStreamOutputConfiguration: Swift.Codable { +extension ForbiddenException { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: ForbiddenExceptionBody = try responseDecoder.decode(responseBody: data) + self.message = output.message + } else { + self.message = nil + } + self._headers = httpResponse.headers + self._statusCode = httpResponse.statusCode + self._requestID = requestID + self._message = message + } +} + +/// Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception. +public struct ForbiddenException: AWSClientRuntime.AWSHttpServiceError, Swift.Equatable { + public var _headers: ClientRuntime.Headers? + public var _statusCode: ClientRuntime.HttpStatusCode? + public var _message: Swift.String? + public var _requestID: Swift.String? + public var _retryable: Swift.Bool = false + public var _isThrottling: Swift.Bool = false + public var _type: ClientRuntime.ErrorType = .client + /// The error message returned by AWS Elemental MediaConnect. + /// This member is required. + public var message: Swift.String? + + public init ( + message: Swift.String? = nil + ) + { + self.message = message + } +} + +struct ForbiddenExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension ForbiddenExceptionBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case destinationConfigurations = "destinationConfigurations" - case encodingName = "encodingName" - case encodingParameters = "encodingParameters" - case mediaStreamName = "mediaStreamName" + case message = "message" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) + message = messageDecoded + } +} + +extension MediaConnectClientTypes.Gateway: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case egressCidrBlocks = "egressCidrBlocks" + case gatewayArn = "gatewayArn" + case gatewayMessages = "gatewayMessages" + case gatewayState = "gatewayState" + case name = "name" + case networks = "networks" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let destinationConfigurations = destinationConfigurations { - var destinationConfigurationsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .destinationConfigurations) - for destinationconfiguration0 in destinationConfigurations { - try destinationConfigurationsContainer.encode(destinationconfiguration0) + if let egressCidrBlocks = egressCidrBlocks { + var egressCidrBlocksContainer = encodeContainer.nestedUnkeyedContainer(forKey: .egressCidrBlocks) + for __string0 in egressCidrBlocks { + try egressCidrBlocksContainer.encode(__string0) } } - if let encodingName = self.encodingName { - try encodeContainer.encode(encodingName.rawValue, forKey: .encodingName) + if let gatewayArn = self.gatewayArn { + try encodeContainer.encode(gatewayArn, forKey: .gatewayArn) } - if let encodingParameters = self.encodingParameters { - try encodeContainer.encode(encodingParameters, forKey: .encodingParameters) + if let gatewayMessages = gatewayMessages { + var gatewayMessagesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .gatewayMessages) + for messagedetail0 in gatewayMessages { + try gatewayMessagesContainer.encode(messagedetail0) + } } - if let mediaStreamName = self.mediaStreamName { - try encodeContainer.encode(mediaStreamName, forKey: .mediaStreamName) + if let gatewayState = self.gatewayState { + try encodeContainer.encode(gatewayState.rawValue, forKey: .gatewayState) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let networks = networks { + var networksContainer = encodeContainer.nestedUnkeyedContainer(forKey: .networks) + for gatewaynetwork0 in networks { + try networksContainer.encode(gatewaynetwork0) + } } } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let destinationConfigurationsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.DestinationConfiguration?].self, forKey: .destinationConfigurations) - var destinationConfigurationsDecoded0:[MediaConnectClientTypes.DestinationConfiguration]? = nil - if let destinationConfigurationsContainer = destinationConfigurationsContainer { - destinationConfigurationsDecoded0 = [MediaConnectClientTypes.DestinationConfiguration]() - for structure0 in destinationConfigurationsContainer { + let egressCidrBlocksContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .egressCidrBlocks) + var egressCidrBlocksDecoded0:[Swift.String]? = nil + if let egressCidrBlocksContainer = egressCidrBlocksContainer { + egressCidrBlocksDecoded0 = [Swift.String]() + for string0 in egressCidrBlocksContainer { + if let string0 = string0 { + egressCidrBlocksDecoded0?.append(string0) + } + } + } + egressCidrBlocks = egressCidrBlocksDecoded0 + let gatewayArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .gatewayArn) + gatewayArn = gatewayArnDecoded + let gatewayMessagesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.MessageDetail?].self, forKey: .gatewayMessages) + var gatewayMessagesDecoded0:[MediaConnectClientTypes.MessageDetail]? = nil + if let gatewayMessagesContainer = gatewayMessagesContainer { + gatewayMessagesDecoded0 = [MediaConnectClientTypes.MessageDetail]() + for structure0 in gatewayMessagesContainer { if let structure0 = structure0 { - destinationConfigurationsDecoded0?.append(structure0) + gatewayMessagesDecoded0?.append(structure0) } } } - destinationConfigurations = destinationConfigurationsDecoded0 - let encodingNameDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.EncodingName.self, forKey: .encodingName) - encodingName = encodingNameDecoded - let encodingParametersDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.EncodingParameters.self, forKey: .encodingParameters) - encodingParameters = encodingParametersDecoded - let mediaStreamNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .mediaStreamName) - mediaStreamName = mediaStreamNameDecoded + gatewayMessages = gatewayMessagesDecoded0 + let gatewayStateDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.GatewayState.self, forKey: .gatewayState) + gatewayState = gatewayStateDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let networksContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.GatewayNetwork?].self, forKey: .networks) + var networksDecoded0:[MediaConnectClientTypes.GatewayNetwork]? = nil + if let networksContainer = networksContainer { + networksDecoded0 = [MediaConnectClientTypes.GatewayNetwork]() + for structure0 in networksContainer { + if let structure0 = structure0 { + networksDecoded0?.append(structure0) + } + } + } + networks = networksDecoded0 } } extension MediaConnectClientTypes { - /// The media stream that is associated with the output, and the parameters for that association. - public struct MediaStreamOutputConfiguration: Swift.Equatable { - /// The transport parameters that are associated with each outbound media stream. - public var destinationConfigurations: [MediaConnectClientTypes.DestinationConfiguration]? - /// The format that was used to encode the data. For ancillary data streams, set the encoding name to smpte291. For audio streams, set the encoding name to pcm. For video, 2110 streams, set the encoding name to raw. For video, JPEG XS streams, set the encoding name to jxsv. + /// The settings for a gateway, including its networks. + public struct Gateway: Swift.Equatable { + /// The range of IP addresses that contribute content or initiate output requests for flows communicating with this gateway. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16. /// This member is required. - public var encodingName: MediaConnectClientTypes.EncodingName? - /// Encoding parameters - public var encodingParameters: MediaConnectClientTypes.EncodingParameters? - /// The name of the media stream. + public var egressCidrBlocks: [Swift.String]? + /// The Amazon Resource Name (ARN) of the gateway. /// This member is required. - public var mediaStreamName: Swift.String? + public var gatewayArn: Swift.String? + public var gatewayMessages: [MediaConnectClientTypes.MessageDetail]? + /// The current status of the gateway. + public var gatewayState: MediaConnectClientTypes.GatewayState? + /// The name of the gateway. This name can not be modified after the gateway is created. + /// This member is required. + public var name: Swift.String? + /// The list of networks in the gateway. + /// This member is required. + public var networks: [MediaConnectClientTypes.GatewayNetwork]? public init ( - destinationConfigurations: [MediaConnectClientTypes.DestinationConfiguration]? = nil, - encodingName: MediaConnectClientTypes.EncodingName? = nil, - encodingParameters: MediaConnectClientTypes.EncodingParameters? = nil, - mediaStreamName: Swift.String? = nil + egressCidrBlocks: [Swift.String]? = nil, + gatewayArn: Swift.String? = nil, + gatewayMessages: [MediaConnectClientTypes.MessageDetail]? = nil, + gatewayState: MediaConnectClientTypes.GatewayState? = nil, + name: Swift.String? = nil, + networks: [MediaConnectClientTypes.GatewayNetwork]? = nil ) { - self.destinationConfigurations = destinationConfigurations - self.encodingName = encodingName - self.encodingParameters = encodingParameters - self.mediaStreamName = mediaStreamName + self.egressCidrBlocks = egressCidrBlocks + self.gatewayArn = gatewayArn + self.gatewayMessages = gatewayMessages + self.gatewayState = gatewayState + self.name = name + self.networks = networks } } } -extension MediaConnectClientTypes.MediaStreamOutputConfigurationRequest: Swift.Codable { +extension MediaConnectClientTypes.GatewayBridgeSource: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case destinationConfigurations = "destinationConfigurations" - case encodingName = "encodingName" - case encodingParameters = "encodingParameters" - case mediaStreamName = "mediaStreamName" + case bridgeArn = "bridgeArn" + case vpcInterfaceAttachment = "vpcInterfaceAttachment" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let destinationConfigurations = destinationConfigurations { - var destinationConfigurationsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .destinationConfigurations) - for destinationconfigurationrequest0 in destinationConfigurations { - try destinationConfigurationsContainer.encode(destinationconfigurationrequest0) - } - } - if let encodingName = self.encodingName { - try encodeContainer.encode(encodingName.rawValue, forKey: .encodingName) + if let bridgeArn = self.bridgeArn { + try encodeContainer.encode(bridgeArn, forKey: .bridgeArn) } - if let encodingParameters = self.encodingParameters { - try encodeContainer.encode(encodingParameters, forKey: .encodingParameters) - } - if let mediaStreamName = self.mediaStreamName { - try encodeContainer.encode(mediaStreamName, forKey: .mediaStreamName) + if let vpcInterfaceAttachment = self.vpcInterfaceAttachment { + try encodeContainer.encode(vpcInterfaceAttachment, forKey: .vpcInterfaceAttachment) } } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let destinationConfigurationsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.DestinationConfigurationRequest?].self, forKey: .destinationConfigurations) - var destinationConfigurationsDecoded0:[MediaConnectClientTypes.DestinationConfigurationRequest]? = nil - if let destinationConfigurationsContainer = destinationConfigurationsContainer { - destinationConfigurationsDecoded0 = [MediaConnectClientTypes.DestinationConfigurationRequest]() - for structure0 in destinationConfigurationsContainer { - if let structure0 = structure0 { - destinationConfigurationsDecoded0?.append(structure0) - } - } - } - destinationConfigurations = destinationConfigurationsDecoded0 - let encodingNameDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.EncodingName.self, forKey: .encodingName) - encodingName = encodingNameDecoded - let encodingParametersDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.EncodingParametersRequest.self, forKey: .encodingParameters) - encodingParameters = encodingParametersDecoded - let mediaStreamNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .mediaStreamName) - mediaStreamName = mediaStreamNameDecoded + let bridgeArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .bridgeArn) + bridgeArn = bridgeArnDecoded + let vpcInterfaceAttachmentDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.VpcInterfaceAttachment.self, forKey: .vpcInterfaceAttachment) + vpcInterfaceAttachment = vpcInterfaceAttachmentDecoded } } extension MediaConnectClientTypes { - /// The media stream that you want to associate with the output, and the parameters for that association. - public struct MediaStreamOutputConfigurationRequest: Swift.Equatable { - /// The transport parameters that you want to associate with the media stream. - public var destinationConfigurations: [MediaConnectClientTypes.DestinationConfigurationRequest]? - /// The format that will be used to encode the data. For ancillary data streams, set the encoding name to smpte291. For audio streams, set the encoding name to pcm. For video, 2110 streams, set the encoding name to raw. For video, JPEG XS streams, set the encoding name to jxsv. - /// This member is required. - public var encodingName: MediaConnectClientTypes.EncodingName? - /// A collection of parameters that determine how MediaConnect will convert the content. These fields only apply to outputs on flows that have a CDI source. - public var encodingParameters: MediaConnectClientTypes.EncodingParametersRequest? - /// The name of the media stream that is associated with the output. + /// The source configuration for cloud flows receiving a stream from a bridge. + public struct GatewayBridgeSource: Swift.Equatable { + /// The ARN of the bridge feeding this flow. /// This member is required. - public var mediaStreamName: Swift.String? + public var bridgeArn: Swift.String? + /// The name of the VPC interface attachment to use for this bridge source. + public var vpcInterfaceAttachment: MediaConnectClientTypes.VpcInterfaceAttachment? public init ( - destinationConfigurations: [MediaConnectClientTypes.DestinationConfigurationRequest]? = nil, - encodingName: MediaConnectClientTypes.EncodingName? = nil, - encodingParameters: MediaConnectClientTypes.EncodingParametersRequest? = nil, - mediaStreamName: Swift.String? = nil + bridgeArn: Swift.String? = nil, + vpcInterfaceAttachment: MediaConnectClientTypes.VpcInterfaceAttachment? = nil ) { - self.destinationConfigurations = destinationConfigurations - self.encodingName = encodingName - self.encodingParameters = encodingParameters - self.mediaStreamName = mediaStreamName + self.bridgeArn = bridgeArn + self.vpcInterfaceAttachment = vpcInterfaceAttachment } } } -extension MediaConnectClientTypes.MediaStreamSourceConfiguration: Swift.Codable { +extension MediaConnectClientTypes.GatewayInstance: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case encodingName = "encodingName" - case inputConfigurations = "inputConfigurations" - case mediaStreamName = "mediaStreamName" + case bridgePlacement = "bridgePlacement" + case connectionStatus = "connectionStatus" + case gatewayArn = "gatewayArn" + case gatewayInstanceArn = "gatewayInstanceArn" + case instanceId = "instanceId" + case instanceMessages = "instanceMessages" + case instanceState = "instanceState" + case runningBridgeCount = "runningBridgeCount" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let encodingName = self.encodingName { - try encodeContainer.encode(encodingName.rawValue, forKey: .encodingName) + if let bridgePlacement = self.bridgePlacement { + try encodeContainer.encode(bridgePlacement.rawValue, forKey: .bridgePlacement) } - if let inputConfigurations = inputConfigurations { - var inputConfigurationsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .inputConfigurations) - for inputconfiguration0 in inputConfigurations { - try inputConfigurationsContainer.encode(inputconfiguration0) + if let connectionStatus = self.connectionStatus { + try encodeContainer.encode(connectionStatus.rawValue, forKey: .connectionStatus) + } + if let gatewayArn = self.gatewayArn { + try encodeContainer.encode(gatewayArn, forKey: .gatewayArn) + } + if let gatewayInstanceArn = self.gatewayInstanceArn { + try encodeContainer.encode(gatewayInstanceArn, forKey: .gatewayInstanceArn) + } + if let instanceId = self.instanceId { + try encodeContainer.encode(instanceId, forKey: .instanceId) + } + if let instanceMessages = instanceMessages { + var instanceMessagesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .instanceMessages) + for messagedetail0 in instanceMessages { + try instanceMessagesContainer.encode(messagedetail0) } } - if let mediaStreamName = self.mediaStreamName { - try encodeContainer.encode(mediaStreamName, forKey: .mediaStreamName) + if let instanceState = self.instanceState { + try encodeContainer.encode(instanceState.rawValue, forKey: .instanceState) + } + if let runningBridgeCount = self.runningBridgeCount { + try encodeContainer.encode(runningBridgeCount, forKey: .runningBridgeCount) } } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let encodingNameDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.EncodingName.self, forKey: .encodingName) - encodingName = encodingNameDecoded - let inputConfigurationsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.InputConfiguration?].self, forKey: .inputConfigurations) - var inputConfigurationsDecoded0:[MediaConnectClientTypes.InputConfiguration]? = nil - if let inputConfigurationsContainer = inputConfigurationsContainer { - inputConfigurationsDecoded0 = [MediaConnectClientTypes.InputConfiguration]() - for structure0 in inputConfigurationsContainer { + let bridgePlacementDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.BridgePlacement.self, forKey: .bridgePlacement) + bridgePlacement = bridgePlacementDecoded + let connectionStatusDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ConnectionStatus.self, forKey: .connectionStatus) + connectionStatus = connectionStatusDecoded + let gatewayArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .gatewayArn) + gatewayArn = gatewayArnDecoded + let gatewayInstanceArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .gatewayInstanceArn) + gatewayInstanceArn = gatewayInstanceArnDecoded + let instanceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .instanceId) + instanceId = instanceIdDecoded + let instanceMessagesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.MessageDetail?].self, forKey: .instanceMessages) + var instanceMessagesDecoded0:[MediaConnectClientTypes.MessageDetail]? = nil + if let instanceMessagesContainer = instanceMessagesContainer { + instanceMessagesDecoded0 = [MediaConnectClientTypes.MessageDetail]() + for structure0 in instanceMessagesContainer { if let structure0 = structure0 { - inputConfigurationsDecoded0?.append(structure0) + instanceMessagesDecoded0?.append(structure0) } } } - inputConfigurations = inputConfigurationsDecoded0 - let mediaStreamNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .mediaStreamName) - mediaStreamName = mediaStreamNameDecoded + instanceMessages = instanceMessagesDecoded0 + let instanceStateDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.InstanceState.self, forKey: .instanceState) + instanceState = instanceStateDecoded + let runningBridgeCountDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .runningBridgeCount) + runningBridgeCount = runningBridgeCountDecoded } } extension MediaConnectClientTypes { - /// The media stream that is associated with the source, and the parameters for that association. - public struct MediaStreamSourceConfiguration: Swift.Equatable { - /// The format that was used to encode the data. For ancillary data streams, set the encoding name to smpte291. For audio streams, set the encoding name to pcm. For video, 2110 streams, set the encoding name to raw. For video, JPEG XS streams, set the encoding name to jxsv. + /// The settings for an instance in a gateway. + public struct GatewayInstance: Swift.Equatable { + /// The availability of the instance to host new bridges. The bridgePlacement property can be LOCKED or AVAILABLE. If it is LOCKED, no new bridges can be deployed to this instance. If it is AVAILABLE, new bridges can be added to this instance. /// This member is required. - public var encodingName: MediaConnectClientTypes.EncodingName? - /// The transport parameters that are associated with an incoming media stream. - public var inputConfigurations: [MediaConnectClientTypes.InputConfiguration]? - /// The name of the media stream. + public var bridgePlacement: MediaConnectClientTypes.BridgePlacement? + /// The connection state of the instance. /// This member is required. - public var mediaStreamName: Swift.String? + public var connectionStatus: MediaConnectClientTypes.ConnectionStatus? + /// The Amazon Resource Name (ARN) of the instance. + /// This member is required. + public var gatewayArn: Swift.String? + /// The Amazon Resource Name (ARN) of the gateway. + /// This member is required. + public var gatewayInstanceArn: Swift.String? + /// The managed instance ID generated by the SSM install. This will begin with "mi-". + /// This member is required. + public var instanceId: Swift.String? + public var instanceMessages: [MediaConnectClientTypes.MessageDetail]? + /// The status of the instance. + /// This member is required. + public var instanceState: MediaConnectClientTypes.InstanceState? + /// The running bridge count. + /// This member is required. + public var runningBridgeCount: Swift.Int? public init ( - encodingName: MediaConnectClientTypes.EncodingName? = nil, - inputConfigurations: [MediaConnectClientTypes.InputConfiguration]? = nil, - mediaStreamName: Swift.String? = nil + bridgePlacement: MediaConnectClientTypes.BridgePlacement? = nil, + connectionStatus: MediaConnectClientTypes.ConnectionStatus? = nil, + gatewayArn: Swift.String? = nil, + gatewayInstanceArn: Swift.String? = nil, + instanceId: Swift.String? = nil, + instanceMessages: [MediaConnectClientTypes.MessageDetail]? = nil, + instanceState: MediaConnectClientTypes.InstanceState? = nil, + runningBridgeCount: Swift.Int? = nil ) { - self.encodingName = encodingName - self.inputConfigurations = inputConfigurations - self.mediaStreamName = mediaStreamName + self.bridgePlacement = bridgePlacement + self.connectionStatus = connectionStatus + self.gatewayArn = gatewayArn + self.gatewayInstanceArn = gatewayInstanceArn + self.instanceId = instanceId + self.instanceMessages = instanceMessages + self.instanceState = instanceState + self.runningBridgeCount = runningBridgeCount } } } -extension MediaConnectClientTypes.MediaStreamSourceConfigurationRequest: Swift.Codable { +extension MediaConnectClientTypes.GatewayNetwork: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case encodingName = "encodingName" - case inputConfigurations = "inputConfigurations" - case mediaStreamName = "mediaStreamName" + case cidrBlock = "cidrBlock" + case name = "name" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let encodingName = self.encodingName { - try encodeContainer.encode(encodingName.rawValue, forKey: .encodingName) - } - if let inputConfigurations = inputConfigurations { - var inputConfigurationsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .inputConfigurations) - for inputconfigurationrequest0 in inputConfigurations { - try inputConfigurationsContainer.encode(inputconfigurationrequest0) - } + if let cidrBlock = self.cidrBlock { + try encodeContainer.encode(cidrBlock, forKey: .cidrBlock) } - if let mediaStreamName = self.mediaStreamName { - try encodeContainer.encode(mediaStreamName, forKey: .mediaStreamName) + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) } } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let encodingNameDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.EncodingName.self, forKey: .encodingName) - encodingName = encodingNameDecoded - let inputConfigurationsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.InputConfigurationRequest?].self, forKey: .inputConfigurations) - var inputConfigurationsDecoded0:[MediaConnectClientTypes.InputConfigurationRequest]? = nil - if let inputConfigurationsContainer = inputConfigurationsContainer { - inputConfigurationsDecoded0 = [MediaConnectClientTypes.InputConfigurationRequest]() - for structure0 in inputConfigurationsContainer { - if let structure0 = structure0 { - inputConfigurationsDecoded0?.append(structure0) - } - } - } - inputConfigurations = inputConfigurationsDecoded0 - let mediaStreamNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .mediaStreamName) - mediaStreamName = mediaStreamNameDecoded + let cidrBlockDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .cidrBlock) + cidrBlock = cidrBlockDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded } } extension MediaConnectClientTypes { - /// The definition of a media stream that you want to associate with the source. - public struct MediaStreamSourceConfigurationRequest: Swift.Equatable { - /// The format you want to use to encode the data. For ancillary data streams, set the encoding name to smpte291. For audio streams, set the encoding name to pcm. For video, 2110 streams, set the encoding name to raw. For video, JPEG XS streams, set the encoding name to jxsv. + /// The network settings for a gateway. + public struct GatewayNetwork: Swift.Equatable { + /// A unique IP address range to use for this network. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16. /// This member is required. - public var encodingName: MediaConnectClientTypes.EncodingName? - /// The transport parameters that you want to associate with the media stream. - public var inputConfigurations: [MediaConnectClientTypes.InputConfigurationRequest]? - /// The name of the media stream. + public var cidrBlock: Swift.String? + /// The name of the network. This name is used to reference the network and must be unique among networks in this gateway. /// This member is required. - public var mediaStreamName: Swift.String? + public var name: Swift.String? public init ( - encodingName: MediaConnectClientTypes.EncodingName? = nil, - inputConfigurations: [MediaConnectClientTypes.InputConfigurationRequest]? = nil, - mediaStreamName: Swift.String? = nil + cidrBlock: Swift.String? = nil, + name: Swift.String? = nil ) { - self.encodingName = encodingName - self.inputConfigurations = inputConfigurations - self.mediaStreamName = mediaStreamName + self.cidrBlock = cidrBlock + self.name = name } } } extension MediaConnectClientTypes { - public enum MediaStreamType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case ancillaryData - case audio - case video + public enum GatewayState: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case active + case creating + case deleted + case deleting + case error + case updating case sdkUnknown(Swift.String) - public static var allCases: [MediaStreamType] { + public static var allCases: [GatewayState] { return [ - .ancillaryData, - .audio, - .video, + .active, + .creating, + .deleted, + .deleting, + .error, + .updating, .sdkUnknown("") ] } @@ -5143,106 +6180,127 @@ extension MediaConnectClientTypes { } public var rawValue: Swift.String { switch self { - case .ancillaryData: return "ancillary-data" - case .audio: return "audio" - case .video: return "video" + case .active: return "ACTIVE" + case .creating: return "CREATING" + case .deleted: return "DELETED" + case .deleting: return "DELETING" + case .error: return "ERROR" + case .updating: return "UPDATING" case let .sdkUnknown(s): return s } } public init(from decoder: Swift.Decoder) throws { let container = try decoder.singleValueContainer() let rawValue = try container.decode(RawValue.self) - self = MediaStreamType(rawValue: rawValue) ?? MediaStreamType.sdkUnknown(rawValue) + self = GatewayState(rawValue: rawValue) ?? GatewayState.sdkUnknown(rawValue) } } } -extension MediaConnectClientTypes.Messages: Swift.Codable { +extension MediaConnectClientTypes.GrantEntitlementRequest: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case errors = "errors" + case dataTransferSubscriberFeePercent = "dataTransferSubscriberFeePercent" + case description = "description" + case encryption = "encryption" + case entitlementStatus = "entitlementStatus" + case name = "name" + case subscribers = "subscribers" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let errors = errors { - var errorsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .errors) - for __string0 in errors { - try errorsContainer.encode(__string0) + if let dataTransferSubscriberFeePercent = self.dataTransferSubscriberFeePercent { + try encodeContainer.encode(dataTransferSubscriberFeePercent, forKey: .dataTransferSubscriberFeePercent) + } + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let encryption = self.encryption { + try encodeContainer.encode(encryption, forKey: .encryption) + } + if let entitlementStatus = self.entitlementStatus { + try encodeContainer.encode(entitlementStatus.rawValue, forKey: .entitlementStatus) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let subscribers = subscribers { + var subscribersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .subscribers) + for __string0 in subscribers { + try subscribersContainer.encode(__string0) } } } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let errorsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .errors) - var errorsDecoded0:[Swift.String]? = nil - if let errorsContainer = errorsContainer { - errorsDecoded0 = [Swift.String]() - for string0 in errorsContainer { - if let string0 = string0 { - errorsDecoded0?.append(string0) + let dataTransferSubscriberFeePercentDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .dataTransferSubscriberFeePercent) + dataTransferSubscriberFeePercent = dataTransferSubscriberFeePercentDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let encryptionDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Encryption.self, forKey: .encryption) + encryption = encryptionDecoded + let entitlementStatusDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.EntitlementStatus.self, forKey: .entitlementStatus) + entitlementStatus = entitlementStatusDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let subscribersContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .subscribers) + var subscribersDecoded0:[Swift.String]? = nil + if let subscribersContainer = subscribersContainer { + subscribersDecoded0 = [Swift.String]() + for string0 in subscribersContainer { + if let string0 = string0 { + subscribersDecoded0?.append(string0) } } } - errors = errorsDecoded0 + subscribers = subscribersDecoded0 } } extension MediaConnectClientTypes { - /// Messages that provide the state of the flow. - public struct Messages: Swift.Equatable { - /// A list of errors that might have been generated from processes on this flow. + /// The entitlements that you want to grant on a flow. + public struct GrantEntitlementRequest: Swift.Equatable { + /// Percentage from 0-100 of the data transfer cost to be billed to the subscriber. + public var dataTransferSubscriberFeePercent: Swift.Int? + /// A description of the entitlement. This description appears only on the AWS Elemental MediaConnect console and will not be seen by the subscriber or end user. + public var description: Swift.String? + /// The type of encryption that will be used on the output that is associated with this entitlement. Allowable encryption types: static-key, speke. + public var encryption: MediaConnectClientTypes.Encryption? + /// An indication of whether the new entitlement should be enabled or disabled as soon as it is created. If you don’t specify the entitlementStatus field in your request, MediaConnect sets it to ENABLED. + public var entitlementStatus: MediaConnectClientTypes.EntitlementStatus? + /// The name of the entitlement. This value must be unique within the current flow. + public var name: Swift.String? + /// The AWS account IDs that you want to share your content with. The receiving accounts (subscribers) will be allowed to create their own flows using your content as the source. /// This member is required. - public var errors: [Swift.String]? + public var subscribers: [Swift.String]? public init ( - errors: [Swift.String]? = nil + dataTransferSubscriberFeePercent: Swift.Int? = nil, + description: Swift.String? = nil, + encryption: MediaConnectClientTypes.Encryption? = nil, + entitlementStatus: MediaConnectClientTypes.EntitlementStatus? = nil, + name: Swift.String? = nil, + subscribers: [Swift.String]? = nil ) { - self.errors = errors + self.dataTransferSubscriberFeePercent = dataTransferSubscriberFeePercent + self.description = description + self.encryption = encryption + self.entitlementStatus = entitlementStatus + self.name = name + self.subscribers = subscribers } } } -extension MediaConnectClientTypes { - public enum NetworkInterfaceType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case efa - case ena - case sdkUnknown(Swift.String) - - public static var allCases: [NetworkInterfaceType] { - return [ - .efa, - .ena, - .sdkUnknown("") - ] - } - 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 .efa: return "efa" - case .ena: return "ena" - case let .sdkUnknown(s): return s - } - } - public init(from decoder: Swift.Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(RawValue.self) - self = NetworkInterfaceType(rawValue: rawValue) ?? NetworkInterfaceType.sdkUnknown(rawValue) - } - } -} - -extension NotFoundException { +extension GrantFlowEntitlements420Exception { public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { if case .stream(let reader) = httpResponse.body, let responseDecoder = decoder { let data = reader.toBytes().getData() - let output: NotFoundExceptionBody = try responseDecoder.decode(responseBody: data) + let output: GrantFlowEntitlements420ExceptionBody = try responseDecoder.decode(responseBody: data) self.message = output.message } else { self.message = nil @@ -5255,7 +6313,7 @@ extension NotFoundException { } /// Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception. -public struct NotFoundException: AWSClientRuntime.AWSHttpServiceError, Swift.Equatable { +public struct GrantFlowEntitlements420Exception: AWSClientRuntime.AWSHttpServiceError, Swift.Equatable { public var _headers: ClientRuntime.Headers? public var _statusCode: ClientRuntime.HttpStatusCode? public var _message: Swift.String? @@ -5275,11 +6333,11 @@ public struct NotFoundException: AWSClientRuntime.AWSHttpServiceError, Swift.Equ } } -struct NotFoundExceptionBody: Swift.Equatable { +struct GrantFlowEntitlements420ExceptionBody: Swift.Equatable { let message: Swift.String? } -extension NotFoundExceptionBody: Swift.Decodable { +extension GrantFlowEntitlements420ExceptionBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case message = "message" } @@ -5291,343 +6349,348 @@ extension NotFoundExceptionBody: Swift.Decodable { } } -extension MediaConnectClientTypes.Offering: Swift.Codable { +extension GrantFlowEntitlementsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case currencyCode = "currencyCode" - case duration = "duration" - case durationUnits = "durationUnits" - case offeringArn = "offeringArn" - case offeringDescription = "offeringDescription" - case pricePerUnit = "pricePerUnit" - case priceUnits = "priceUnits" - case resourceSpecification = "resourceSpecification" + case entitlements = "entitlements" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let currencyCode = self.currencyCode { - try encodeContainer.encode(currencyCode, forKey: .currencyCode) - } - if let duration = self.duration { - try encodeContainer.encode(duration, forKey: .duration) - } - if let durationUnits = self.durationUnits { - try encodeContainer.encode(durationUnits.rawValue, forKey: .durationUnits) - } - if let offeringArn = self.offeringArn { - try encodeContainer.encode(offeringArn, forKey: .offeringArn) - } - if let offeringDescription = self.offeringDescription { - try encodeContainer.encode(offeringDescription, forKey: .offeringDescription) - } - if let pricePerUnit = self.pricePerUnit { - try encodeContainer.encode(pricePerUnit, forKey: .pricePerUnit) - } - if let priceUnits = self.priceUnits { - try encodeContainer.encode(priceUnits.rawValue, forKey: .priceUnits) - } - if let resourceSpecification = self.resourceSpecification { - try encodeContainer.encode(resourceSpecification, forKey: .resourceSpecification) + if let entitlements = entitlements { + var entitlementsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .entitlements) + for grantentitlementrequest0 in entitlements { + try entitlementsContainer.encode(grantentitlementrequest0) + } } } +} - public init (from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let currencyCodeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .currencyCode) - currencyCode = currencyCodeDecoded - let durationDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .duration) - duration = durationDecoded - let durationUnitsDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.DurationUnits.self, forKey: .durationUnits) - durationUnits = durationUnitsDecoded - let offeringArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .offeringArn) - offeringArn = offeringArnDecoded - let offeringDescriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .offeringDescription) - offeringDescription = offeringDescriptionDecoded - let pricePerUnitDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .pricePerUnit) - pricePerUnit = pricePerUnitDecoded - let priceUnitsDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.PriceUnits.self, forKey: .priceUnits) - priceUnits = priceUnitsDecoded - let resourceSpecificationDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ResourceSpecification.self, forKey: .resourceSpecification) - resourceSpecification = resourceSpecificationDecoded +extension GrantFlowEntitlementsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let flowArn = flowArn else { + return nil + } + return "/v1/flows/\(flowArn.urlPercentEncoding())/entitlements" } } -extension MediaConnectClientTypes { - /// A savings plan that reserves a certain amount of outbound bandwidth usage at a discounted rate each month over a period of time. - public struct Offering: Swift.Equatable { - /// The type of currency that is used for billing. The currencyCode used for all reservations is US dollars. - /// This member is required. - public var currencyCode: Swift.String? - /// The length of time that your reservation would be active. - /// This member is required. - public var duration: Swift.Int? - /// The unit of measurement for the duration of the offering. - /// This member is required. - public var durationUnits: MediaConnectClientTypes.DurationUnits? - /// The Amazon Resource Name (ARN) that MediaConnect assigns to the offering. - /// This member is required. - public var offeringArn: Swift.String? - /// A description of the offering. - /// This member is required. - public var offeringDescription: Swift.String? - /// The cost of a single unit. This value, in combination with priceUnits, makes up the rate. - /// This member is required. - public var pricePerUnit: Swift.String? - /// The unit of measurement that is used for billing. This value, in combination with pricePerUnit, makes up the rate. - /// This member is required. - public var priceUnits: MediaConnectClientTypes.PriceUnits? - /// A definition of the amount of outbound bandwidth that you would be reserving if you purchase the offering. - /// This member is required. - public var resourceSpecification: MediaConnectClientTypes.ResourceSpecification? +/// A request to grant entitlements on a flow. +public struct GrantFlowEntitlementsInput: Swift.Equatable { + /// The list of entitlements that you want to grant. + /// This member is required. + public var entitlements: [MediaConnectClientTypes.GrantEntitlementRequest]? + /// The flow that you want to grant entitlements on. + /// This member is required. + public var flowArn: Swift.String? - public init ( - currencyCode: Swift.String? = nil, - duration: Swift.Int? = nil, - durationUnits: MediaConnectClientTypes.DurationUnits? = nil, - offeringArn: Swift.String? = nil, - offeringDescription: Swift.String? = nil, - pricePerUnit: Swift.String? = nil, - priceUnits: MediaConnectClientTypes.PriceUnits? = nil, - resourceSpecification: MediaConnectClientTypes.ResourceSpecification? = nil - ) - { - self.currencyCode = currencyCode - self.duration = duration - self.durationUnits = durationUnits - self.offeringArn = offeringArn - self.offeringDescription = offeringDescription - self.pricePerUnit = pricePerUnit - self.priceUnits = priceUnits - self.resourceSpecification = resourceSpecification - } + public init ( + entitlements: [MediaConnectClientTypes.GrantEntitlementRequest]? = nil, + flowArn: Swift.String? = nil + ) + { + self.entitlements = entitlements + self.flowArn = flowArn } +} +struct GrantFlowEntitlementsInputBody: Swift.Equatable { + let entitlements: [MediaConnectClientTypes.GrantEntitlementRequest]? } -extension MediaConnectClientTypes.Output: Swift.Codable { +extension GrantFlowEntitlementsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case dataTransferSubscriberFeePercent = "dataTransferSubscriberFeePercent" - case description = "description" - case destination = "destination" - case encryption = "encryption" - case entitlementArn = "entitlementArn" - case listenerAddress = "listenerAddress" - case mediaLiveInputArn = "mediaLiveInputArn" - case mediaStreamOutputConfigurations = "mediaStreamOutputConfigurations" - case name = "name" - case outputArn = "outputArn" - case port = "port" - case transport = "transport" - case vpcInterfaceAttachment = "vpcInterfaceAttachment" + case entitlements = "entitlements" } - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let dataTransferSubscriberFeePercent = self.dataTransferSubscriberFeePercent { - try encodeContainer.encode(dataTransferSubscriberFeePercent, forKey: .dataTransferSubscriberFeePercent) - } - if let description = self.description { - try encodeContainer.encode(description, forKey: .description) + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let entitlementsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.GrantEntitlementRequest?].self, forKey: .entitlements) + var entitlementsDecoded0:[MediaConnectClientTypes.GrantEntitlementRequest]? = nil + if let entitlementsContainer = entitlementsContainer { + entitlementsDecoded0 = [MediaConnectClientTypes.GrantEntitlementRequest]() + for structure0 in entitlementsContainer { + if let structure0 = structure0 { + entitlementsDecoded0?.append(structure0) + } + } } - if let destination = self.destination { - try encodeContainer.encode(destination, forKey: .destination) - } - if let encryption = self.encryption { - try encodeContainer.encode(encryption, forKey: .encryption) - } - if let entitlementArn = self.entitlementArn { - try encodeContainer.encode(entitlementArn, forKey: .entitlementArn) - } - if let listenerAddress = self.listenerAddress { - try encodeContainer.encode(listenerAddress, forKey: .listenerAddress) + entitlements = entitlementsDecoded0 + } +} + +extension GrantFlowEntitlementsOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} + +extension GrantFlowEntitlementsOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "GrantFlowEntitlements420Exception" : self = .grantFlowEntitlements420Exception(try GrantFlowEntitlements420Exception(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) } - if let mediaLiveInputArn = self.mediaLiveInputArn { - try encodeContainer.encode(mediaLiveInputArn, forKey: .mediaLiveInputArn) + } +} + +public enum GrantFlowEntitlementsOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case forbiddenException(ForbiddenException) + case grantFlowEntitlements420Exception(GrantFlowEntitlements420Exception) + case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) +} + +extension GrantFlowEntitlementsOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: GrantFlowEntitlementsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.entitlements = output.entitlements + self.flowArn = output.flowArn + } else { + self.entitlements = nil + self.flowArn = nil } - if let mediaStreamOutputConfigurations = mediaStreamOutputConfigurations { - var mediaStreamOutputConfigurationsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .mediaStreamOutputConfigurations) - for mediastreamoutputconfiguration0 in mediaStreamOutputConfigurations { - try mediaStreamOutputConfigurationsContainer.encode(mediastreamoutputconfiguration0) + } +} + +public struct GrantFlowEntitlementsOutputResponse: Swift.Equatable { + /// The entitlements that were just granted. + public var entitlements: [MediaConnectClientTypes.Entitlement]? + /// The ARN of the flow that these entitlements were granted to. + public var flowArn: Swift.String? + + public init ( + entitlements: [MediaConnectClientTypes.Entitlement]? = nil, + flowArn: Swift.String? = nil + ) + { + self.entitlements = entitlements + self.flowArn = flowArn + } +} + +struct GrantFlowEntitlementsOutputResponseBody: Swift.Equatable { + let entitlements: [MediaConnectClientTypes.Entitlement]? + let flowArn: Swift.String? +} + +extension GrantFlowEntitlementsOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case entitlements = "entitlements" + case flowArn = "flowArn" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let entitlementsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.Entitlement?].self, forKey: .entitlements) + var entitlementsDecoded0:[MediaConnectClientTypes.Entitlement]? = nil + if let entitlementsContainer = entitlementsContainer { + entitlementsDecoded0 = [MediaConnectClientTypes.Entitlement]() + for structure0 in entitlementsContainer { + if let structure0 = structure0 { + entitlementsDecoded0?.append(structure0) + } } } - if let name = self.name { - try encodeContainer.encode(name, forKey: .name) - } - if let outputArn = self.outputArn { - try encodeContainer.encode(outputArn, forKey: .outputArn) - } - if let port = self.port { - try encodeContainer.encode(port, forKey: .port) + entitlements = entitlementsDecoded0 + let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) + flowArn = flowArnDecoded + } +} + +extension MediaConnectClientTypes.IngressGatewayBridge: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case instanceId = "instanceId" + case maxBitrate = "maxBitrate" + case maxOutputs = "maxOutputs" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let instanceId = self.instanceId { + try encodeContainer.encode(instanceId, forKey: .instanceId) } - if let transport = self.transport { - try encodeContainer.encode(transport, forKey: .transport) + if let maxBitrate = self.maxBitrate { + try encodeContainer.encode(maxBitrate, forKey: .maxBitrate) } - if let vpcInterfaceAttachment = self.vpcInterfaceAttachment { - try encodeContainer.encode(vpcInterfaceAttachment, forKey: .vpcInterfaceAttachment) + if let maxOutputs = self.maxOutputs { + try encodeContainer.encode(maxOutputs, forKey: .maxOutputs) } } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let dataTransferSubscriberFeePercentDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .dataTransferSubscriberFeePercent) - dataTransferSubscriberFeePercent = dataTransferSubscriberFeePercentDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let destinationDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .destination) - destination = destinationDecoded - let encryptionDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Encryption.self, forKey: .encryption) - encryption = encryptionDecoded - let entitlementArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .entitlementArn) - entitlementArn = entitlementArnDecoded - let listenerAddressDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .listenerAddress) - listenerAddress = listenerAddressDecoded - let mediaLiveInputArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .mediaLiveInputArn) - mediaLiveInputArn = mediaLiveInputArnDecoded - let mediaStreamOutputConfigurationsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.MediaStreamOutputConfiguration?].self, forKey: .mediaStreamOutputConfigurations) - var mediaStreamOutputConfigurationsDecoded0:[MediaConnectClientTypes.MediaStreamOutputConfiguration]? = nil - if let mediaStreamOutputConfigurationsContainer = mediaStreamOutputConfigurationsContainer { - mediaStreamOutputConfigurationsDecoded0 = [MediaConnectClientTypes.MediaStreamOutputConfiguration]() - for structure0 in mediaStreamOutputConfigurationsContainer { - if let structure0 = structure0 { - mediaStreamOutputConfigurationsDecoded0?.append(structure0) - } - } - } - mediaStreamOutputConfigurations = mediaStreamOutputConfigurationsDecoded0 - let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) - name = nameDecoded - let outputArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .outputArn) - outputArn = outputArnDecoded - let portDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .port) - port = portDecoded - let transportDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Transport.self, forKey: .transport) - transport = transportDecoded - let vpcInterfaceAttachmentDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.VpcInterfaceAttachment.self, forKey: .vpcInterfaceAttachment) - vpcInterfaceAttachment = vpcInterfaceAttachmentDecoded + let instanceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .instanceId) + instanceId = instanceIdDecoded + let maxBitrateDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxBitrate) + maxBitrate = maxBitrateDecoded + let maxOutputsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxOutputs) + maxOutputs = maxOutputsDecoded } } extension MediaConnectClientTypes { - /// The settings for an output. - public struct Output: Swift.Equatable { - /// Percentage from 0-100 of the data transfer cost to be billed to the subscriber. - public var dataTransferSubscriberFeePercent: Swift.Int? - /// A description of the output. - public var description: Swift.String? - /// The address where you want to send the output. - public var destination: Swift.String? - /// The type of key used for the encryption. If no keyType is provided, the service will use the default setting (static-key). - public var encryption: MediaConnectClientTypes.Encryption? - /// The ARN of the entitlement on the originator''s flow. This value is relevant only on entitled flows. - public var entitlementArn: Swift.String? - /// The IP address that the receiver requires in order to establish a connection with the flow. For public networking, the ListenerAddress is represented by the elastic IP address of the flow. For private networking, the ListenerAddress is represented by the elastic network interface IP address of the VPC. This field applies only to outputs that use the Zixi pull or SRT listener protocol. - public var listenerAddress: Swift.String? - /// The input ARN of the AWS Elemental MediaLive channel. This parameter is relevant only for outputs that were added by creating a MediaLive input. - public var mediaLiveInputArn: Swift.String? - /// The configuration for each media stream that is associated with the output. - public var mediaStreamOutputConfigurations: [MediaConnectClientTypes.MediaStreamOutputConfiguration]? - /// The name of the output. This value must be unique within the current flow. + public struct IngressGatewayBridge: Swift.Equatable { + /// The ID of the instance running this bridge. + public var instanceId: Swift.String? + /// The maximum expected bitrate (in bps) of the ingress bridge. /// This member is required. - public var name: Swift.String? - /// The ARN of the output. + public var maxBitrate: Swift.Int? + /// The maximum number of outputs on the ingress bridge. /// This member is required. - public var outputArn: Swift.String? - /// The port to use when content is distributed to this output. - public var port: Swift.Int? - /// Attributes related to the transport stream that are used in the output. - public var transport: MediaConnectClientTypes.Transport? - /// The name of the VPC interface attachment to use for this output. - public var vpcInterfaceAttachment: MediaConnectClientTypes.VpcInterfaceAttachment? + public var maxOutputs: Swift.Int? public init ( - dataTransferSubscriberFeePercent: Swift.Int? = nil, - description: Swift.String? = nil, - destination: Swift.String? = nil, - encryption: MediaConnectClientTypes.Encryption? = nil, - entitlementArn: Swift.String? = nil, - listenerAddress: Swift.String? = nil, - mediaLiveInputArn: Swift.String? = nil, - mediaStreamOutputConfigurations: [MediaConnectClientTypes.MediaStreamOutputConfiguration]? = nil, - name: Swift.String? = nil, - outputArn: Swift.String? = nil, - port: Swift.Int? = nil, - transport: MediaConnectClientTypes.Transport? = nil, - vpcInterfaceAttachment: MediaConnectClientTypes.VpcInterfaceAttachment? = nil + instanceId: Swift.String? = nil, + maxBitrate: Swift.Int? = nil, + maxOutputs: Swift.Int? = nil ) { - self.dataTransferSubscriberFeePercent = dataTransferSubscriberFeePercent - self.description = description - self.destination = destination - self.encryption = encryption - self.entitlementArn = entitlementArn - self.listenerAddress = listenerAddress - self.mediaLiveInputArn = mediaLiveInputArn - self.mediaStreamOutputConfigurations = mediaStreamOutputConfigurations - self.name = name - self.outputArn = outputArn - self.port = port - self.transport = transport - self.vpcInterfaceAttachment = vpcInterfaceAttachment + self.instanceId = instanceId + self.maxBitrate = maxBitrate + self.maxOutputs = maxOutputs } } } -extension MediaConnectClientTypes { - public enum PriceUnits: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case hourly - case sdkUnknown(Swift.String) +extension MediaConnectClientTypes.InputConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case inputIp = "inputIp" + case inputPort = "inputPort" + case interface = "interface" + } - public static var allCases: [PriceUnits] { - return [ - .hourly, - .sdkUnknown("") - ] + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let inputIp = self.inputIp { + try encodeContainer.encode(inputIp, forKey: .inputIp) } - public init?(rawValue: Swift.String) { - let value = Self.allCases.first(where: { $0.rawValue == rawValue }) - self = value ?? Self.sdkUnknown(rawValue) + if let inputPort = self.inputPort { + try encodeContainer.encode(inputPort, forKey: .inputPort) } - public var rawValue: Swift.String { - switch self { - case .hourly: return "HOURLY" - case let .sdkUnknown(s): return s - } + if let interface = self.interface { + try encodeContainer.encode(interface, forKey: .interface) } - public init(from decoder: Swift.Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(RawValue.self) - self = PriceUnits(rawValue: rawValue) ?? PriceUnits.sdkUnknown(rawValue) + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let inputIpDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .inputIp) + inputIp = inputIpDecoded + let inputPortDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .inputPort) + inputPort = inputPortDecoded + let interfaceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Interface.self, forKey: .interface) + interface = interfaceDecoded + } +} + +extension MediaConnectClientTypes { + /// The transport parameters that are associated with an incoming media stream. + public struct InputConfiguration: Swift.Equatable { + /// The IP address that the flow listens on for incoming content for a media stream. + /// This member is required. + public var inputIp: Swift.String? + /// The port that the flow listens on for an incoming media stream. + /// This member is required. + public var inputPort: Swift.Int? + /// The VPC interface where the media stream comes in from. + /// This member is required. + public var interface: MediaConnectClientTypes.Interface? + + public init ( + inputIp: Swift.String? = nil, + inputPort: Swift.Int? = nil, + interface: MediaConnectClientTypes.Interface? = nil + ) + { + self.inputIp = inputIp + self.inputPort = inputPort + self.interface = interface + } + } + +} + +extension MediaConnectClientTypes.InputConfigurationRequest: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case inputPort = "inputPort" + case interface = "interface" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let inputPort = self.inputPort { + try encodeContainer.encode(inputPort, forKey: .inputPort) + } + if let interface = self.interface { + try encodeContainer.encode(interface, forKey: .interface) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let inputPortDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .inputPort) + inputPort = inputPortDecoded + let interfaceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.InterfaceRequest.self, forKey: .interface) + interface = interfaceDecoded + } +} + +extension MediaConnectClientTypes { + /// The transport parameters that you want to associate with an incoming media stream. + public struct InputConfigurationRequest: Swift.Equatable { + /// The port that you want the flow to listen on for an incoming media stream. + /// This member is required. + public var inputPort: Swift.Int? + /// The VPC interface that you want to use for the incoming media stream. + /// This member is required. + public var interface: MediaConnectClientTypes.InterfaceRequest? + + public init ( + inputPort: Swift.Int? = nil, + interface: MediaConnectClientTypes.InterfaceRequest? = nil + ) + { + self.inputPort = inputPort + self.interface = interface } } + } extension MediaConnectClientTypes { - public enum ModelProtocol: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case cdi - case fujitsuQos - case rist - case rtp - case rtpFec - case srtCaller - case srtListener - case st2110Jpegxs - case zixiPull - case zixiPush + public enum InstanceState: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case active + case deregistered + case deregistering + case deregistrationError + case registering + case registrationError case sdkUnknown(Swift.String) - public static var allCases: [ModelProtocol] { + public static var allCases: [InstanceState] { return [ - .cdi, - .fujitsuQos, - .rist, - .rtp, - .rtpFec, - .srtCaller, - .srtListener, - .st2110Jpegxs, - .zixiPull, - .zixiPush, + .active, + .deregistered, + .deregistering, + .deregistrationError, + .registering, + .registrationError, .sdkUnknown("") ] } @@ -5637,182 +6700,161 @@ extension MediaConnectClientTypes { } public var rawValue: Swift.String { switch self { - case .cdi: return "cdi" - case .fujitsuQos: return "fujitsu-qos" - case .rist: return "rist" - case .rtp: return "rtp" - case .rtpFec: return "rtp-fec" - case .srtCaller: return "srt-caller" - case .srtListener: return "srt-listener" - case .st2110Jpegxs: return "st2110-jpegxs" - case .zixiPull: return "zixi-pull" - case .zixiPush: return "zixi-push" + case .active: return "ACTIVE" + case .deregistered: return "DEREGISTERED" + case .deregistering: return "DEREGISTERING" + case .deregistrationError: return "DEREGISTRATION_ERROR" + case .registering: return "REGISTERING" + case .registrationError: return "REGISTRATION_ERROR" case let .sdkUnknown(s): return s } } public init(from decoder: Swift.Decoder) throws { let container = try decoder.singleValueContainer() let rawValue = try container.decode(RawValue.self) - self = ModelProtocol(rawValue: rawValue) ?? ModelProtocol.sdkUnknown(rawValue) + self = InstanceState(rawValue: rawValue) ?? InstanceState.sdkUnknown(rawValue) } } } -extension PurchaseOfferingInput: Swift.Encodable { +extension MediaConnectClientTypes.Interface: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case reservationName = "reservationName" - case start = "start" + case name = "name" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let reservationName = self.reservationName { - try encodeContainer.encode(reservationName, forKey: .reservationName) - } - if let start = self.start { - try encodeContainer.encode(start, forKey: .start) + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) } } -} -extension PurchaseOfferingInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let offeringArn = offeringArn else { - return nil - } - return "/v1/offerings/\(offeringArn.urlPercentEncoding())" + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded } } -/// A request to purchase a offering. -public struct PurchaseOfferingInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the offering. - /// This member is required. - public var offeringArn: Swift.String? - /// The name that you want to use for the reservation. - /// This member is required. - public var reservationName: Swift.String? - /// The date and time that you want the reservation to begin, in Coordinated Universal Time (UTC). You can specify any date and time between 12:00am on the first day of the current month to the current time on today's date, inclusive. Specify the start in a 24-hour notation. Use the following format: YYYY-MM-DDTHH:mm:SSZ, where T and Z are literal characters. For example, to specify 11:30pm on March 5, 2020, enter 2020-03-05T23:30:00Z. - /// This member is required. - public var start: Swift.String? +extension MediaConnectClientTypes { + /// The VPC interface that is used for the media stream associated with the source or output. + public struct Interface: Swift.Equatable { + /// The name of the VPC interface. + /// This member is required. + public var name: Swift.String? - public init ( - offeringArn: Swift.String? = nil, - reservationName: Swift.String? = nil, - start: Swift.String? = nil - ) - { - self.offeringArn = offeringArn - self.reservationName = reservationName - self.start = start + public init ( + name: Swift.String? = nil + ) + { + self.name = name + } } -} -struct PurchaseOfferingInputBody: Swift.Equatable { - let reservationName: Swift.String? - let start: Swift.String? } -extension PurchaseOfferingInputBody: Swift.Decodable { +extension MediaConnectClientTypes.InterfaceRequest: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case reservationName = "reservationName" - case start = "start" + case name = "name" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let reservationNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .reservationName) - reservationName = reservationNameDecoded - let startDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .start) - start = startDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded } } -extension PurchaseOfferingOutputError: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { - let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) - try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) - } -} +extension MediaConnectClientTypes { + /// The VPC interface that you want to designate where the media stream is coming from or going to. + public struct InterfaceRequest: Swift.Equatable { + /// The name of the VPC interface. + /// This member is required. + public var name: Swift.String? -extension PurchaseOfferingOutputError { - public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { - switch errorType { - case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + public init ( + name: Swift.String? = nil + ) + { + self.name = name } } -} -public enum PurchaseOfferingOutputError: Swift.Error, Swift.Equatable { - case badRequestException(BadRequestException) - case forbiddenException(ForbiddenException) - case internalServerErrorException(InternalServerErrorException) - case notFoundException(NotFoundException) - case serviceUnavailableException(ServiceUnavailableException) - case tooManyRequestsException(TooManyRequestsException) - case unknown(UnknownAWSHttpServiceError) } -extension PurchaseOfferingOutputResponse: ClientRuntime.HttpResponseBinding { - public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { +extension InternalServerErrorException { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { if case .stream(let reader) = httpResponse.body, let responseDecoder = decoder { let data = reader.toBytes().getData() - let output: PurchaseOfferingOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.reservation = output.reservation + let output: InternalServerErrorExceptionBody = try responseDecoder.decode(responseBody: data) + self.message = output.message } else { - self.reservation = nil + self.message = nil } + self._headers = httpResponse.headers + self._statusCode = httpResponse.statusCode + self._requestID = requestID + self._message = message } } -public struct PurchaseOfferingOutputResponse: Swift.Equatable { - /// A pricing agreement for a discounted rate for a specific outbound bandwidth that your MediaConnect account will use each month over a specific time period. The discounted rate in the reservation applies to outbound bandwidth for all flows from your account until your account reaches the amount of bandwidth in your reservation. If you use more outbound bandwidth than the agreed upon amount in a single month, the overage is charged at the on-demand rate. - public var reservation: MediaConnectClientTypes.Reservation? - - public init ( - reservation: MediaConnectClientTypes.Reservation? = nil +/// Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception. +public struct InternalServerErrorException: AWSClientRuntime.AWSHttpServiceError, Swift.Equatable { + public var _headers: ClientRuntime.Headers? + public var _statusCode: ClientRuntime.HttpStatusCode? + public var _message: Swift.String? + public var _requestID: Swift.String? + public var _retryable: Swift.Bool = false + public var _isThrottling: Swift.Bool = false + public var _type: ClientRuntime.ErrorType = .server + /// The error message returned by AWS Elemental MediaConnect. + /// This member is required. + public var message: Swift.String? + + public init ( + message: Swift.String? = nil ) { - self.reservation = reservation + self.message = message } } -struct PurchaseOfferingOutputResponseBody: Swift.Equatable { - let reservation: MediaConnectClientTypes.Reservation? +struct InternalServerErrorExceptionBody: Swift.Equatable { + let message: Swift.String? } -extension PurchaseOfferingOutputResponseBody: Swift.Decodable { +extension InternalServerErrorExceptionBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case reservation = "reservation" + case message = "message" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let reservationDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Reservation.self, forKey: .reservation) - reservation = reservationDecoded + let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) + message = messageDecoded } } extension MediaConnectClientTypes { - public enum Range: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case full - case fullprotect - case narrow + public enum KeyType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case speke + case srtPassword + case staticKey case sdkUnknown(Swift.String) - public static var allCases: [Range] { + public static var allCases: [KeyType] { return [ - .full, - .fullprotect, - .narrow, + .speke, + .srtPassword, + .staticKey, .sdkUnknown("") ] } @@ -5822,60 +6864,77 @@ extension MediaConnectClientTypes { } public var rawValue: Swift.String { switch self { - case .full: return "FULL" - case .fullprotect: return "FULLPROTECT" - case .narrow: return "NARROW" + case .speke: return "speke" + case .srtPassword: return "srt-password" + case .staticKey: return "static-key" case let .sdkUnknown(s): return s } } public init(from decoder: Swift.Decoder) throws { let container = try decoder.singleValueContainer() let rawValue = try container.decode(RawValue.self) - self = Range(rawValue: rawValue) ?? Range.sdkUnknown(rawValue) + self = KeyType(rawValue: rawValue) ?? KeyType.sdkUnknown(rawValue) } } } -extension RemoveFlowMediaStreamInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let flowArn = flowArn else { - return nil - } - guard let mediaStreamName = mediaStreamName else { - return nil +extension ListBridgesInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + if let nextToken = nextToken { + let nextTokenQueryItem = ClientRuntime.URLQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let maxResults = maxResults { + let maxResultsQueryItem = ClientRuntime.URLQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + if let filterArn = filterArn { + let filterArnQueryItem = ClientRuntime.URLQueryItem(name: "filterArn".urlPercentEncoding(), value: Swift.String(filterArn).urlPercentEncoding()) + items.append(filterArnQueryItem) + } + return items } - return "/v1/flows/\(flowArn.urlPercentEncoding())/mediaStreams/\(mediaStreamName.urlPercentEncoding())" } } -public struct RemoveFlowMediaStreamInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the flow. - /// This member is required. - public var flowArn: Swift.String? - /// The name of the media stream that you want to remove. - /// This member is required. - public var mediaStreamName: Swift.String? +extension ListBridgesInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/v1/bridges" + } +} + +public struct ListBridgesInput: Swift.Equatable { + /// Filter the list results to display only the bridges associated with the selected Amazon Resource Name (ARN). + public var filterArn: Swift.String? + /// The maximum number of results to return per API request. For example, you submit a ListBridges request with MaxResults set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a NextToken value that you can use to fetch the next batch of results.) The service might return fewer results than the MaxResults value. If MaxResults is not included in the request, the service defaults to pagination with a maximum of 10 results per page. + public var maxResults: Swift.Int? + /// The token that identifies which batch of results that you want to see. For example, you submit a ListBridges request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListBridges request a second time and specify the NextToken value. + public var nextToken: Swift.String? public init ( - flowArn: Swift.String? = nil, - mediaStreamName: Swift.String? = nil + filterArn: Swift.String? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil ) { - self.flowArn = flowArn - self.mediaStreamName = mediaStreamName + self.filterArn = filterArn + self.maxResults = maxResults + self.nextToken = nextToken } } -struct RemoveFlowMediaStreamInputBody: Swift.Equatable { +struct ListBridgesInputBody: Swift.Equatable { } -extension RemoveFlowMediaStreamInputBody: Swift.Decodable { +extension ListBridgesInputBody: Swift.Decodable { public init (from decoder: Swift.Decoder) throws { } } -extension RemoveFlowMediaStreamOutputError: ClientRuntime.HttpResponseBinding { +extension ListBridgesOutputError: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) @@ -5883,13 +6942,12 @@ extension RemoveFlowMediaStreamOutputError: ClientRuntime.HttpResponseBinding { } } -extension RemoveFlowMediaStreamOutputError { +extension ListBridgesOutputError { public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { switch errorType { case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ConflictException" : self = .conflictException(try ConflictException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) @@ -5897,107 +6955,124 @@ extension RemoveFlowMediaStreamOutputError { } } -public enum RemoveFlowMediaStreamOutputError: Swift.Error, Swift.Equatable { +public enum ListBridgesOutputError: Swift.Error, Swift.Equatable { case badRequestException(BadRequestException) - case forbiddenException(ForbiddenException) + case conflictException(ConflictException) case internalServerErrorException(InternalServerErrorException) - case notFoundException(NotFoundException) case serviceUnavailableException(ServiceUnavailableException) case tooManyRequestsException(TooManyRequestsException) case unknown(UnknownAWSHttpServiceError) } -extension RemoveFlowMediaStreamOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListBridgesOutputResponse: ClientRuntime.HttpResponseBinding { public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { if case .stream(let reader) = httpResponse.body, let responseDecoder = decoder { let data = reader.toBytes().getData() - let output: RemoveFlowMediaStreamOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.flowArn = output.flowArn - self.mediaStreamName = output.mediaStreamName + let output: ListBridgesOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.bridges = output.bridges + self.nextToken = output.nextToken } else { - self.flowArn = nil - self.mediaStreamName = nil + self.bridges = nil + self.nextToken = nil } } } -public struct RemoveFlowMediaStreamOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the flow. - public var flowArn: Swift.String? - /// The name of the media stream that was removed. - public var mediaStreamName: Swift.String? +public struct ListBridgesOutputResponse: Swift.Equatable { + /// A list of bridge summaries. + public var bridges: [MediaConnectClientTypes.ListedBridge]? + /// The token that identifies which batch of results that you want to see. For example, you submit a ListBridges request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListBridges request a second time and specify the NextToken value. + public var nextToken: Swift.String? public init ( - flowArn: Swift.String? = nil, - mediaStreamName: Swift.String? = nil + bridges: [MediaConnectClientTypes.ListedBridge]? = nil, + nextToken: Swift.String? = nil ) { - self.flowArn = flowArn - self.mediaStreamName = mediaStreamName + self.bridges = bridges + self.nextToken = nextToken } } -struct RemoveFlowMediaStreamOutputResponseBody: Swift.Equatable { - let flowArn: Swift.String? - let mediaStreamName: Swift.String? +struct ListBridgesOutputResponseBody: Swift.Equatable { + let bridges: [MediaConnectClientTypes.ListedBridge]? + let nextToken: Swift.String? } -extension RemoveFlowMediaStreamOutputResponseBody: Swift.Decodable { +extension ListBridgesOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case flowArn = "flowArn" - case mediaStreamName = "mediaStreamName" + case bridges = "bridges" + case nextToken = "nextToken" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) - flowArn = flowArnDecoded - let mediaStreamNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .mediaStreamName) - mediaStreamName = mediaStreamNameDecoded + let bridgesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.ListedBridge?].self, forKey: .bridges) + var bridgesDecoded0:[MediaConnectClientTypes.ListedBridge]? = nil + if let bridgesContainer = bridgesContainer { + bridgesDecoded0 = [MediaConnectClientTypes.ListedBridge]() + for structure0 in bridgesContainer { + if let structure0 = structure0 { + bridgesDecoded0?.append(structure0) + } + } + } + bridges = bridgesDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded } } -extension RemoveFlowOutputInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let flowArn = flowArn else { - return nil - } - guard let outputArn = outputArn else { - return nil +extension ListEntitlementsInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + if let nextToken = nextToken { + let nextTokenQueryItem = ClientRuntime.URLQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let maxResults = maxResults { + let maxResultsQueryItem = ClientRuntime.URLQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + return items } - return "/v1/flows/\(flowArn.urlPercentEncoding())/outputs/\(outputArn.urlPercentEncoding())" } } -public struct RemoveFlowOutputInput: Swift.Equatable { - /// The flow that you want to remove an output from. - /// This member is required. - public var flowArn: Swift.String? - /// The ARN of the output that you want to remove. - /// This member is required. - public var outputArn: Swift.String? +extension ListEntitlementsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/v1/entitlements" + } +} + +public struct ListEntitlementsInput: Swift.Equatable { + /// The maximum number of results to return per API request. For example, you submit a ListEntitlements request with MaxResults set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a NextToken value that you can use to fetch the next batch of results.) The service might return fewer results than the MaxResults value. If MaxResults is not included in the request, the service defaults to pagination with a maximum of 20 results per page. + public var maxResults: Swift.Int? + /// The token that identifies which batch of results that you want to see. For example, you submit a ListEntitlements request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListEntitlements request a second time and specify the NextToken value. + public var nextToken: Swift.String? public init ( - flowArn: Swift.String? = nil, - outputArn: Swift.String? = nil + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil ) { - self.flowArn = flowArn - self.outputArn = outputArn + self.maxResults = maxResults + self.nextToken = nextToken } } -struct RemoveFlowOutputInputBody: Swift.Equatable { +struct ListEntitlementsInputBody: Swift.Equatable { } -extension RemoveFlowOutputInputBody: Swift.Decodable { +extension ListEntitlementsInputBody: Swift.Decodable { public init (from decoder: Swift.Decoder) throws { } } -extension RemoveFlowOutputOutputError: ClientRuntime.HttpResponseBinding { +extension ListEntitlementsOutputError: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) @@ -6005,13 +7080,11 @@ extension RemoveFlowOutputOutputError: ClientRuntime.HttpResponseBinding { } } -extension RemoveFlowOutputOutputError { +extension ListEntitlementsOutputError { public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { switch errorType { case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) @@ -6019,107 +7092,123 @@ extension RemoveFlowOutputOutputError { } } -public enum RemoveFlowOutputOutputError: Swift.Error, Swift.Equatable { +public enum ListEntitlementsOutputError: Swift.Error, Swift.Equatable { case badRequestException(BadRequestException) - case forbiddenException(ForbiddenException) case internalServerErrorException(InternalServerErrorException) - case notFoundException(NotFoundException) case serviceUnavailableException(ServiceUnavailableException) case tooManyRequestsException(TooManyRequestsException) case unknown(UnknownAWSHttpServiceError) } -extension RemoveFlowOutputOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListEntitlementsOutputResponse: ClientRuntime.HttpResponseBinding { public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { if case .stream(let reader) = httpResponse.body, let responseDecoder = decoder { let data = reader.toBytes().getData() - let output: RemoveFlowOutputOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.flowArn = output.flowArn - self.outputArn = output.outputArn + let output: ListEntitlementsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.entitlements = output.entitlements + self.nextToken = output.nextToken } else { - self.flowArn = nil - self.outputArn = nil + self.entitlements = nil + self.nextToken = nil } } } -public struct RemoveFlowOutputOutputResponse: Swift.Equatable { - /// The ARN of the flow that is associated with the output you removed. - public var flowArn: Swift.String? - /// The ARN of the output that was removed. - public var outputArn: Swift.String? +public struct ListEntitlementsOutputResponse: Swift.Equatable { + /// A list of entitlements that have been granted to you from other AWS accounts. + public var entitlements: [MediaConnectClientTypes.ListedEntitlement]? + /// The token that identifies which batch of results that you want to see. For example, you submit a ListEntitlements request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListEntitlements request a second time and specify the NextToken value. + public var nextToken: Swift.String? public init ( - flowArn: Swift.String? = nil, - outputArn: Swift.String? = nil + entitlements: [MediaConnectClientTypes.ListedEntitlement]? = nil, + nextToken: Swift.String? = nil ) { - self.flowArn = flowArn - self.outputArn = outputArn + self.entitlements = entitlements + self.nextToken = nextToken } } -struct RemoveFlowOutputOutputResponseBody: Swift.Equatable { - let flowArn: Swift.String? - let outputArn: Swift.String? +struct ListEntitlementsOutputResponseBody: Swift.Equatable { + let entitlements: [MediaConnectClientTypes.ListedEntitlement]? + let nextToken: Swift.String? } -extension RemoveFlowOutputOutputResponseBody: Swift.Decodable { +extension ListEntitlementsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case flowArn = "flowArn" - case outputArn = "outputArn" + case entitlements = "entitlements" + case nextToken = "nextToken" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) - flowArn = flowArnDecoded - let outputArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .outputArn) - outputArn = outputArnDecoded - } -} - -extension RemoveFlowSourceInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let flowArn = flowArn else { - return nil + let entitlementsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.ListedEntitlement?].self, forKey: .entitlements) + var entitlementsDecoded0:[MediaConnectClientTypes.ListedEntitlement]? = nil + if let entitlementsContainer = entitlementsContainer { + entitlementsDecoded0 = [MediaConnectClientTypes.ListedEntitlement]() + for structure0 in entitlementsContainer { + if let structure0 = structure0 { + entitlementsDecoded0?.append(structure0) + } + } } - guard let sourceArn = sourceArn else { - return nil + entitlements = entitlementsDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + +extension ListFlowsInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + if let nextToken = nextToken { + let nextTokenQueryItem = ClientRuntime.URLQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let maxResults = maxResults { + let maxResultsQueryItem = ClientRuntime.URLQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + return items } - return "/v1/flows/\(flowArn.urlPercentEncoding())/source/\(sourceArn.urlPercentEncoding())" } } -public struct RemoveFlowSourceInput: Swift.Equatable { - /// The flow that you want to remove a source from. - /// This member is required. - public var flowArn: Swift.String? - /// The ARN of the source that you want to remove. - /// This member is required. - public var sourceArn: Swift.String? +extension ListFlowsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/v1/flows" + } +} + +public struct ListFlowsInput: Swift.Equatable { + /// The maximum number of results to return per API request. For example, you submit a ListFlows request with MaxResults set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a NextToken value that you can use to fetch the next batch of results.) The service might return fewer results than the MaxResults value. If MaxResults is not included in the request, the service defaults to pagination with a maximum of 10 results per page. + public var maxResults: Swift.Int? + /// The token that identifies which batch of results that you want to see. For example, you submit a ListFlows request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListFlows request a second time and specify the NextToken value. + public var nextToken: Swift.String? public init ( - flowArn: Swift.String? = nil, - sourceArn: Swift.String? = nil + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil ) { - self.flowArn = flowArn - self.sourceArn = sourceArn + self.maxResults = maxResults + self.nextToken = nextToken } } -struct RemoveFlowSourceInputBody: Swift.Equatable { +struct ListFlowsInputBody: Swift.Equatable { } -extension RemoveFlowSourceInputBody: Swift.Decodable { +extension ListFlowsInputBody: Swift.Decodable { public init (from decoder: Swift.Decoder) throws { } } -extension RemoveFlowSourceOutputError: ClientRuntime.HttpResponseBinding { +extension ListFlowsOutputError: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) @@ -6127,13 +7216,11 @@ extension RemoveFlowSourceOutputError: ClientRuntime.HttpResponseBinding { } } -extension RemoveFlowSourceOutputError { +extension ListFlowsOutputError { public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { switch errorType { case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) @@ -6141,107 +7228,131 @@ extension RemoveFlowSourceOutputError { } } -public enum RemoveFlowSourceOutputError: Swift.Error, Swift.Equatable { +public enum ListFlowsOutputError: Swift.Error, Swift.Equatable { case badRequestException(BadRequestException) - case forbiddenException(ForbiddenException) case internalServerErrorException(InternalServerErrorException) - case notFoundException(NotFoundException) case serviceUnavailableException(ServiceUnavailableException) case tooManyRequestsException(TooManyRequestsException) case unknown(UnknownAWSHttpServiceError) } -extension RemoveFlowSourceOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListFlowsOutputResponse: ClientRuntime.HttpResponseBinding { public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { if case .stream(let reader) = httpResponse.body, let responseDecoder = decoder { let data = reader.toBytes().getData() - let output: RemoveFlowSourceOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.flowArn = output.flowArn - self.sourceArn = output.sourceArn + let output: ListFlowsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.flows = output.flows + self.nextToken = output.nextToken } else { - self.flowArn = nil - self.sourceArn = nil + self.flows = nil + self.nextToken = nil } } } -public struct RemoveFlowSourceOutputResponse: Swift.Equatable { - /// The ARN of the flow that is associated with the source you removed. - public var flowArn: Swift.String? - /// The ARN of the source that was removed. - public var sourceArn: Swift.String? +public struct ListFlowsOutputResponse: Swift.Equatable { + /// A list of flow summaries. + public var flows: [MediaConnectClientTypes.ListedFlow]? + /// The token that identifies which batch of results that you want to see. For example, you submit a ListFlows request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListFlows request a second time and specify the NextToken value. + public var nextToken: Swift.String? public init ( - flowArn: Swift.String? = nil, - sourceArn: Swift.String? = nil + flows: [MediaConnectClientTypes.ListedFlow]? = nil, + nextToken: Swift.String? = nil ) { - self.flowArn = flowArn - self.sourceArn = sourceArn + self.flows = flows + self.nextToken = nextToken } } -struct RemoveFlowSourceOutputResponseBody: Swift.Equatable { - let flowArn: Swift.String? - let sourceArn: Swift.String? +struct ListFlowsOutputResponseBody: Swift.Equatable { + let flows: [MediaConnectClientTypes.ListedFlow]? + let nextToken: Swift.String? } -extension RemoveFlowSourceOutputResponseBody: Swift.Decodable { +extension ListFlowsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case flowArn = "flowArn" - case sourceArn = "sourceArn" + case flows = "flows" + case nextToken = "nextToken" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) - flowArn = flowArnDecoded - let sourceArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sourceArn) - sourceArn = sourceArnDecoded + let flowsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.ListedFlow?].self, forKey: .flows) + var flowsDecoded0:[MediaConnectClientTypes.ListedFlow]? = nil + if let flowsContainer = flowsContainer { + flowsDecoded0 = [MediaConnectClientTypes.ListedFlow]() + for structure0 in flowsContainer { + if let structure0 = structure0 { + flowsDecoded0?.append(structure0) + } + } + } + flows = flowsDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded } } -extension RemoveFlowVpcInterfaceInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let flowArn = flowArn else { - return nil - } - guard let vpcInterfaceName = vpcInterfaceName else { - return nil +extension ListGatewayInstancesInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + if let nextToken = nextToken { + let nextTokenQueryItem = ClientRuntime.URLQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let maxResults = maxResults { + let maxResultsQueryItem = ClientRuntime.URLQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + if let filterArn = filterArn { + let filterArnQueryItem = ClientRuntime.URLQueryItem(name: "filterArn".urlPercentEncoding(), value: Swift.String(filterArn).urlPercentEncoding()) + items.append(filterArnQueryItem) + } + return items } - return "/v1/flows/\(flowArn.urlPercentEncoding())/vpcInterfaces/\(vpcInterfaceName.urlPercentEncoding())" } } -public struct RemoveFlowVpcInterfaceInput: Swift.Equatable { - /// The flow that you want to remove a VPC interface from. - /// This member is required. - public var flowArn: Swift.String? - /// The name of the VPC interface that you want to remove. - /// This member is required. - public var vpcInterfaceName: Swift.String? +extension ListGatewayInstancesInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/v1/gateway-instances" + } +} + +public struct ListGatewayInstancesInput: Swift.Equatable { + /// Filter the list results to display only the instances associated with the selected Gateway Amazon Resource Name (ARN). + public var filterArn: Swift.String? + /// The maximum number of results to return per API request. For example, you submit a ListInstances request with MaxResults set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a NextToken value that you can use to fetch the next batch of results.) The service might return fewer results than the MaxResults value. If MaxResults is not included in the request, the service defaults to pagination with a maximum of 10 results per page. + public var maxResults: Swift.Int? + /// The token that identifies which batch of results that you want to see. For example, you submit a ListInstances request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListInstances request a second time and specify the NextToken value. + public var nextToken: Swift.String? public init ( - flowArn: Swift.String? = nil, - vpcInterfaceName: Swift.String? = nil + filterArn: Swift.String? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil ) { - self.flowArn = flowArn - self.vpcInterfaceName = vpcInterfaceName + self.filterArn = filterArn + self.maxResults = maxResults + self.nextToken = nextToken } } -struct RemoveFlowVpcInterfaceInputBody: Swift.Equatable { +struct ListGatewayInstancesInputBody: Swift.Equatable { } -extension RemoveFlowVpcInterfaceInputBody: Swift.Decodable { +extension ListGatewayInstancesInputBody: Swift.Decodable { public init (from decoder: Swift.Decoder) throws { } } -extension RemoveFlowVpcInterfaceOutputError: ClientRuntime.HttpResponseBinding { +extension ListGatewayInstancesOutputError: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) @@ -6249,13 +7360,12 @@ extension RemoveFlowVpcInterfaceOutputError: ClientRuntime.HttpResponseBinding { } } -extension RemoveFlowVpcInterfaceOutputError { +extension ListGatewayInstancesOutputError { public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { switch errorType { case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ConflictException" : self = .conflictException(try ConflictException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) @@ -6263,268 +7373,4117 @@ extension RemoveFlowVpcInterfaceOutputError { } } -public enum RemoveFlowVpcInterfaceOutputError: Swift.Error, Swift.Equatable { +public enum ListGatewayInstancesOutputError: Swift.Error, Swift.Equatable { case badRequestException(BadRequestException) - case forbiddenException(ForbiddenException) + case conflictException(ConflictException) case internalServerErrorException(InternalServerErrorException) - case notFoundException(NotFoundException) case serviceUnavailableException(ServiceUnavailableException) case tooManyRequestsException(TooManyRequestsException) case unknown(UnknownAWSHttpServiceError) } -extension RemoveFlowVpcInterfaceOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListGatewayInstancesOutputResponse: ClientRuntime.HttpResponseBinding { public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { if case .stream(let reader) = httpResponse.body, let responseDecoder = decoder { let data = reader.toBytes().getData() - let output: RemoveFlowVpcInterfaceOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.flowArn = output.flowArn - self.nonDeletedNetworkInterfaceIds = output.nonDeletedNetworkInterfaceIds - self.vpcInterfaceName = output.vpcInterfaceName + let output: ListGatewayInstancesOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.instances = output.instances + self.nextToken = output.nextToken } else { - self.flowArn = nil - self.nonDeletedNetworkInterfaceIds = nil - self.vpcInterfaceName = nil + self.instances = nil + self.nextToken = nil } } } -public struct RemoveFlowVpcInterfaceOutputResponse: Swift.Equatable { - /// The ARN of the flow that is associated with the VPC interface you removed. - public var flowArn: Swift.String? - /// IDs of network interfaces associated with the removed VPC interface that Media Connect was unable to remove. - public var nonDeletedNetworkInterfaceIds: [Swift.String]? - /// The name of the VPC interface that was removed. - public var vpcInterfaceName: Swift.String? +public struct ListGatewayInstancesOutputResponse: Swift.Equatable { + /// A list of instance summaries. + public var instances: [MediaConnectClientTypes.ListedGatewayInstance]? + /// The token that identifies which batch of results that you want to see. For example, you submit a ListInstances request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListInstances request a second time and specify the NextToken value. + public var nextToken: Swift.String? public init ( - flowArn: Swift.String? = nil, - nonDeletedNetworkInterfaceIds: [Swift.String]? = nil, - vpcInterfaceName: Swift.String? = nil + instances: [MediaConnectClientTypes.ListedGatewayInstance]? = nil, + nextToken: Swift.String? = nil ) { - self.flowArn = flowArn - self.nonDeletedNetworkInterfaceIds = nonDeletedNetworkInterfaceIds - self.vpcInterfaceName = vpcInterfaceName + self.instances = instances + self.nextToken = nextToken + } +} + +struct ListGatewayInstancesOutputResponseBody: Swift.Equatable { + let instances: [MediaConnectClientTypes.ListedGatewayInstance]? + let nextToken: Swift.String? +} + +extension ListGatewayInstancesOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case instances = "instances" + case nextToken = "nextToken" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let instancesContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.ListedGatewayInstance?].self, forKey: .instances) + var instancesDecoded0:[MediaConnectClientTypes.ListedGatewayInstance]? = nil + if let instancesContainer = instancesContainer { + instancesDecoded0 = [MediaConnectClientTypes.ListedGatewayInstance]() + for structure0 in instancesContainer { + if let structure0 = structure0 { + instancesDecoded0?.append(structure0) + } + } + } + instances = instancesDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + +extension ListGatewaysInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + if let nextToken = nextToken { + let nextTokenQueryItem = ClientRuntime.URLQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let maxResults = maxResults { + let maxResultsQueryItem = ClientRuntime.URLQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + return items + } + } +} + +extension ListGatewaysInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/v1/gateways" + } +} + +public struct ListGatewaysInput: Swift.Equatable { + /// The maximum number of results to return per API request. For example, you submit a ListGateways request with MaxResults set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a NextToken value that you can use to fetch the next batch of results.) The service might return fewer results than the MaxResults value. If MaxResults is not included in the request, the service defaults to pagination with a maximum of 10 results per page. + public var maxResults: Swift.Int? + /// The token that identifies which batch of results that you want to see. For example, you submit a ListGateways request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListGateways request a second time and specify the NextToken value. + public var nextToken: Swift.String? + + public init ( + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil + ) + { + self.maxResults = maxResults + self.nextToken = nextToken + } +} + +struct ListGatewaysInputBody: Swift.Equatable { +} + +extension ListGatewaysInputBody: Swift.Decodable { + + public init (from decoder: Swift.Decoder) throws { + } +} + +extension ListGatewaysOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} + +extension ListGatewaysOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ConflictException" : self = .conflictException(try ConflictException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + } + } +} + +public enum ListGatewaysOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case conflictException(ConflictException) + case internalServerErrorException(InternalServerErrorException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) +} + +extension ListGatewaysOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: ListGatewaysOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.gateways = output.gateways + self.nextToken = output.nextToken + } else { + self.gateways = nil + self.nextToken = nil + } + } +} + +public struct ListGatewaysOutputResponse: Swift.Equatable { + /// A list of gateway summaries. + public var gateways: [MediaConnectClientTypes.ListedGateway]? + /// The token that identifies which batch of results that you want to see. For example, you submit a ListGateways request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListGateways request a second time and specify the NextToken value. + public var nextToken: Swift.String? + + public init ( + gateways: [MediaConnectClientTypes.ListedGateway]? = nil, + nextToken: Swift.String? = nil + ) + { + self.gateways = gateways + self.nextToken = nextToken + } +} + +struct ListGatewaysOutputResponseBody: Swift.Equatable { + let gateways: [MediaConnectClientTypes.ListedGateway]? + let nextToken: Swift.String? +} + +extension ListGatewaysOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case gateways = "gateways" + case nextToken = "nextToken" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let gatewaysContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.ListedGateway?].self, forKey: .gateways) + var gatewaysDecoded0:[MediaConnectClientTypes.ListedGateway]? = nil + if let gatewaysContainer = gatewaysContainer { + gatewaysDecoded0 = [MediaConnectClientTypes.ListedGateway]() + for structure0 in gatewaysContainer { + if let structure0 = structure0 { + gatewaysDecoded0?.append(structure0) + } + } + } + gateways = gatewaysDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + +extension ListOfferingsInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + if let nextToken = nextToken { + let nextTokenQueryItem = ClientRuntime.URLQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let maxResults = maxResults { + let maxResultsQueryItem = ClientRuntime.URLQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + return items + } + } +} + +extension ListOfferingsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/v1/offerings" + } +} + +public struct ListOfferingsInput: Swift.Equatable { + /// The maximum number of results to return per API request. For example, you submit a ListOfferings request with MaxResults set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a NextToken value that you can use to fetch the next batch of results.) The service might return fewer results than the MaxResults value. If MaxResults is not included in the request, the service defaults to pagination with a maximum of 10 results per page. + public var maxResults: Swift.Int? + /// The token that identifies which batch of results that you want to see. For example, you submit a ListOfferings request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListOfferings request a second time and specify the NextToken value. + public var nextToken: Swift.String? + + public init ( + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil + ) + { + self.maxResults = maxResults + self.nextToken = nextToken + } +} + +struct ListOfferingsInputBody: Swift.Equatable { +} + +extension ListOfferingsInputBody: Swift.Decodable { + + public init (from decoder: Swift.Decoder) throws { + } +} + +extension ListOfferingsOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} + +extension ListOfferingsOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + } + } +} + +public enum ListOfferingsOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case internalServerErrorException(InternalServerErrorException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) +} + +extension ListOfferingsOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: ListOfferingsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.nextToken = output.nextToken + self.offerings = output.offerings + } else { + self.nextToken = nil + self.offerings = nil + } + } +} + +public struct ListOfferingsOutputResponse: Swift.Equatable { + /// The token that identifies which batch of results that you want to see. For example, you submit a ListOfferings request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListOfferings request a second time and specify the NextToken value. + public var nextToken: Swift.String? + /// A list of offerings that are available to this account in the current AWS Region. + public var offerings: [MediaConnectClientTypes.Offering]? + + public init ( + nextToken: Swift.String? = nil, + offerings: [MediaConnectClientTypes.Offering]? = nil + ) + { + self.nextToken = nextToken + self.offerings = offerings + } +} + +struct ListOfferingsOutputResponseBody: Swift.Equatable { + let nextToken: Swift.String? + let offerings: [MediaConnectClientTypes.Offering]? +} + +extension ListOfferingsOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case nextToken = "nextToken" + case offerings = "offerings" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + let offeringsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.Offering?].self, forKey: .offerings) + var offeringsDecoded0:[MediaConnectClientTypes.Offering]? = nil + if let offeringsContainer = offeringsContainer { + offeringsDecoded0 = [MediaConnectClientTypes.Offering]() + for structure0 in offeringsContainer { + if let structure0 = structure0 { + offeringsDecoded0?.append(structure0) + } + } + } + offerings = offeringsDecoded0 + } +} + +extension ListReservationsInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + if let nextToken = nextToken { + let nextTokenQueryItem = ClientRuntime.URLQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let maxResults = maxResults { + let maxResultsQueryItem = ClientRuntime.URLQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + return items + } + } +} + +extension ListReservationsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/v1/reservations" + } +} + +public struct ListReservationsInput: Swift.Equatable { + /// The maximum number of results to return per API request. For example, you submit a ListReservations request with MaxResults set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a NextToken value that you can use to fetch the next batch of results.) The service might return fewer results than the MaxResults value. If MaxResults is not included in the request, the service defaults to pagination with a maximum of 10 results per page. + public var maxResults: Swift.Int? + /// The token that identifies which batch of results that you want to see. For example, you submit a ListReservations request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListOfferings request a second time and specify the NextToken value. + public var nextToken: Swift.String? + + public init ( + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil + ) + { + self.maxResults = maxResults + self.nextToken = nextToken + } +} + +struct ListReservationsInputBody: Swift.Equatable { +} + +extension ListReservationsInputBody: Swift.Decodable { + + public init (from decoder: Swift.Decoder) throws { + } +} + +extension ListReservationsOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} + +extension ListReservationsOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + } + } +} + +public enum ListReservationsOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case internalServerErrorException(InternalServerErrorException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) +} + +extension ListReservationsOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: ListReservationsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.nextToken = output.nextToken + self.reservations = output.reservations + } else { + self.nextToken = nil + self.reservations = nil + } + } +} + +public struct ListReservationsOutputResponse: Swift.Equatable { + /// The token that identifies which batch of results that you want to see. For example, you submit a ListReservations request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListReservations request a second time and specify the NextToken value. + public var nextToken: Swift.String? + /// A list of all reservations that have been purchased by this account in the current AWS Region. + public var reservations: [MediaConnectClientTypes.Reservation]? + + public init ( + nextToken: Swift.String? = nil, + reservations: [MediaConnectClientTypes.Reservation]? = nil + ) + { + self.nextToken = nextToken + self.reservations = reservations + } +} + +struct ListReservationsOutputResponseBody: Swift.Equatable { + let nextToken: Swift.String? + let reservations: [MediaConnectClientTypes.Reservation]? +} + +extension ListReservationsOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case nextToken = "nextToken" + case reservations = "reservations" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + let reservationsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.Reservation?].self, forKey: .reservations) + var reservationsDecoded0:[MediaConnectClientTypes.Reservation]? = nil + if let reservationsContainer = reservationsContainer { + reservationsDecoded0 = [MediaConnectClientTypes.Reservation]() + for structure0 in reservationsContainer { + if let structure0 = structure0 { + reservationsDecoded0?.append(structure0) + } + } + } + reservations = reservationsDecoded0 + } +} + +extension ListTagsForResourceInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let resourceArn = resourceArn else { + return nil + } + return "/tags/\(resourceArn.urlPercentEncoding())" + } +} + +public struct ListTagsForResourceInput: Swift.Equatable { + /// The Amazon Resource Name (ARN) that identifies the AWS Elemental MediaConnect resource for which to list the tags. + /// This member is required. + public var resourceArn: Swift.String? + + public init ( + resourceArn: Swift.String? = nil + ) + { + self.resourceArn = resourceArn + } +} + +struct ListTagsForResourceInputBody: Swift.Equatable { +} + +extension ListTagsForResourceInputBody: Swift.Decodable { + + public init (from decoder: Swift.Decoder) throws { + } +} + +extension ListTagsForResourceOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} + +extension ListTagsForResourceOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + } + } +} + +public enum ListTagsForResourceOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) + case unknown(UnknownAWSHttpServiceError) +} + +extension ListTagsForResourceOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: ListTagsForResourceOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.tags = output.tags + } else { + self.tags = nil + } + } +} + +public struct ListTagsForResourceOutputResponse: Swift.Equatable { + /// A map from tag keys to values. Tag keys can have a maximum character length of 128 characters, and tag values can have a maximum length of 256 characters. + public var tags: [Swift.String:Swift.String]? + + public init ( + tags: [Swift.String:Swift.String]? = nil + ) + { + self.tags = tags + } +} + +struct ListTagsForResourceOutputResponseBody: Swift.Equatable { + let tags: [Swift.String:Swift.String]? +} + +extension ListTagsForResourceOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case tags = "tags" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let tagsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .tags) + var tagsDecoded0: [Swift.String:Swift.String]? = nil + if let tagsContainer = tagsContainer { + tagsDecoded0 = [Swift.String:Swift.String]() + for (key0, __string0) in tagsContainer { + if let __string0 = __string0 { + tagsDecoded0?[key0] = __string0 + } + } + } + tags = tagsDecoded0 + } +} + +extension MediaConnectClientTypes.ListedBridge: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case bridgeArn = "bridgeArn" + case bridgeState = "bridgeState" + case bridgeType = "bridgeType" + case name = "name" + case placementArn = "placementArn" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let bridgeArn = self.bridgeArn { + try encodeContainer.encode(bridgeArn, forKey: .bridgeArn) + } + if let bridgeState = self.bridgeState { + try encodeContainer.encode(bridgeState.rawValue, forKey: .bridgeState) + } + if let bridgeType = self.bridgeType { + try encodeContainer.encode(bridgeType, forKey: .bridgeType) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let placementArn = self.placementArn { + try encodeContainer.encode(placementArn, forKey: .placementArn) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let bridgeArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .bridgeArn) + bridgeArn = bridgeArnDecoded + let bridgeStateDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.BridgeState.self, forKey: .bridgeState) + bridgeState = bridgeStateDecoded + let bridgeTypeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .bridgeType) + bridgeType = bridgeTypeDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let placementArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .placementArn) + placementArn = placementArnDecoded + } +} + +extension MediaConnectClientTypes { + /// Displays details of the selected bridge. + public struct ListedBridge: Swift.Equatable { + /// The ARN of the bridge. + /// This member is required. + public var bridgeArn: Swift.String? + /// This member is required. + public var bridgeState: MediaConnectClientTypes.BridgeState? + /// The type of the bridge. + /// This member is required. + public var bridgeType: Swift.String? + /// The name of the bridge. + /// This member is required. + public var name: Swift.String? + /// The ARN of the gateway associated with the bridge. + /// This member is required. + public var placementArn: Swift.String? + + public init ( + bridgeArn: Swift.String? = nil, + bridgeState: MediaConnectClientTypes.BridgeState? = nil, + bridgeType: Swift.String? = nil, + name: Swift.String? = nil, + placementArn: Swift.String? = nil + ) + { + self.bridgeArn = bridgeArn + self.bridgeState = bridgeState + self.bridgeType = bridgeType + self.name = name + self.placementArn = placementArn + } + } + +} + +extension MediaConnectClientTypes.ListedEntitlement: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case dataTransferSubscriberFeePercent = "dataTransferSubscriberFeePercent" + case entitlementArn = "entitlementArn" + case entitlementName = "entitlementName" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let dataTransferSubscriberFeePercent = self.dataTransferSubscriberFeePercent { + try encodeContainer.encode(dataTransferSubscriberFeePercent, forKey: .dataTransferSubscriberFeePercent) + } + if let entitlementArn = self.entitlementArn { + try encodeContainer.encode(entitlementArn, forKey: .entitlementArn) + } + if let entitlementName = self.entitlementName { + try encodeContainer.encode(entitlementName, forKey: .entitlementName) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let dataTransferSubscriberFeePercentDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .dataTransferSubscriberFeePercent) + dataTransferSubscriberFeePercent = dataTransferSubscriberFeePercentDecoded + let entitlementArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .entitlementArn) + entitlementArn = entitlementArnDecoded + let entitlementNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .entitlementName) + entitlementName = entitlementNameDecoded + } +} + +extension MediaConnectClientTypes { + /// An entitlement that has been granted to you from other AWS accounts. + public struct ListedEntitlement: Swift.Equatable { + /// Percentage from 0-100 of the data transfer cost to be billed to the subscriber. + public var dataTransferSubscriberFeePercent: Swift.Int? + /// The ARN of the entitlement. + /// This member is required. + public var entitlementArn: Swift.String? + /// The name of the entitlement. + /// This member is required. + public var entitlementName: Swift.String? + + public init ( + dataTransferSubscriberFeePercent: Swift.Int? = nil, + entitlementArn: Swift.String? = nil, + entitlementName: Swift.String? = nil + ) + { + self.dataTransferSubscriberFeePercent = dataTransferSubscriberFeePercent + self.entitlementArn = entitlementArn + self.entitlementName = entitlementName + } + } + +} + +extension MediaConnectClientTypes.ListedFlow: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case availabilityZone = "availabilityZone" + case description = "description" + case flowArn = "flowArn" + case maintenance = "maintenance" + case name = "name" + case sourceType = "sourceType" + case status = "status" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let availabilityZone = self.availabilityZone { + try encodeContainer.encode(availabilityZone, forKey: .availabilityZone) + } + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let flowArn = self.flowArn { + try encodeContainer.encode(flowArn, forKey: .flowArn) + } + if let maintenance = self.maintenance { + try encodeContainer.encode(maintenance, forKey: .maintenance) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let sourceType = self.sourceType { + try encodeContainer.encode(sourceType.rawValue, forKey: .sourceType) + } + if let status = self.status { + try encodeContainer.encode(status.rawValue, forKey: .status) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let availabilityZoneDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .availabilityZone) + availabilityZone = availabilityZoneDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) + flowArn = flowArnDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let sourceTypeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.SourceType.self, forKey: .sourceType) + sourceType = sourceTypeDecoded + let statusDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Status.self, forKey: .status) + status = statusDecoded + let maintenanceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Maintenance.self, forKey: .maintenance) + maintenance = maintenanceDecoded + } +} + +extension MediaConnectClientTypes { + /// Provides a summary of a flow, including its ARN, Availability Zone, and source type. + public struct ListedFlow: Swift.Equatable { + /// The Availability Zone that the flow was created in. + /// This member is required. + public var availabilityZone: Swift.String? + /// A description of the flow. + /// This member is required. + public var description: Swift.String? + /// The ARN of the flow. + /// This member is required. + public var flowArn: Swift.String? + /// The maintenance setting of a flow + public var maintenance: MediaConnectClientTypes.Maintenance? + /// The name of the flow. + /// This member is required. + public var name: Swift.String? + /// The type of source. This value is either owned (originated somewhere other than an AWS Elemental MediaConnect flow owned by another AWS account) or entitled (originated at an AWS Elemental MediaConnect flow owned by another AWS account). + /// This member is required. + public var sourceType: MediaConnectClientTypes.SourceType? + /// The current status of the flow. + /// This member is required. + public var status: MediaConnectClientTypes.Status? + + public init ( + availabilityZone: Swift.String? = nil, + description: Swift.String? = nil, + flowArn: Swift.String? = nil, + maintenance: MediaConnectClientTypes.Maintenance? = nil, + name: Swift.String? = nil, + sourceType: MediaConnectClientTypes.SourceType? = nil, + status: MediaConnectClientTypes.Status? = nil + ) + { + self.availabilityZone = availabilityZone + self.description = description + self.flowArn = flowArn + self.maintenance = maintenance + self.name = name + self.sourceType = sourceType + self.status = status + } + } + +} + +extension MediaConnectClientTypes.ListedGateway: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case gatewayArn = "gatewayArn" + case gatewayState = "gatewayState" + case name = "name" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let gatewayArn = self.gatewayArn { + try encodeContainer.encode(gatewayArn, forKey: .gatewayArn) + } + if let gatewayState = self.gatewayState { + try encodeContainer.encode(gatewayState.rawValue, forKey: .gatewayState) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let gatewayArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .gatewayArn) + gatewayArn = gatewayArnDecoded + let gatewayStateDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.GatewayState.self, forKey: .gatewayState) + gatewayState = gatewayStateDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + } +} + +extension MediaConnectClientTypes { + /// Provides a summary of a gateway, including its name, ARN, and status. + public struct ListedGateway: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the gateway. + /// This member is required. + public var gatewayArn: Swift.String? + /// This member is required. + public var gatewayState: MediaConnectClientTypes.GatewayState? + /// The name of the gateway. + /// This member is required. + public var name: Swift.String? + + public init ( + gatewayArn: Swift.String? = nil, + gatewayState: MediaConnectClientTypes.GatewayState? = nil, + name: Swift.String? = nil + ) + { + self.gatewayArn = gatewayArn + self.gatewayState = gatewayState + self.name = name + } + } + +} + +extension MediaConnectClientTypes.ListedGatewayInstance: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case gatewayArn = "gatewayArn" + case gatewayInstanceArn = "gatewayInstanceArn" + case instanceId = "instanceId" + case instanceState = "instanceState" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let gatewayArn = self.gatewayArn { + try encodeContainer.encode(gatewayArn, forKey: .gatewayArn) + } + if let gatewayInstanceArn = self.gatewayInstanceArn { + try encodeContainer.encode(gatewayInstanceArn, forKey: .gatewayInstanceArn) + } + if let instanceId = self.instanceId { + try encodeContainer.encode(instanceId, forKey: .instanceId) + } + if let instanceState = self.instanceState { + try encodeContainer.encode(instanceState.rawValue, forKey: .instanceState) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let gatewayArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .gatewayArn) + gatewayArn = gatewayArnDecoded + let gatewayInstanceArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .gatewayInstanceArn) + gatewayInstanceArn = gatewayInstanceArnDecoded + let instanceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .instanceId) + instanceId = instanceIdDecoded + let instanceStateDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.InstanceState.self, forKey: .instanceState) + instanceState = instanceStateDecoded + } +} + +extension MediaConnectClientTypes { + /// Provides a summary of an instance. + public struct ListedGatewayInstance: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the gateway. + /// This member is required. + public var gatewayArn: Swift.String? + /// The Amazon Resource Name (ARN) of the instance. + /// This member is required. + public var gatewayInstanceArn: Swift.String? + /// The managed instance ID generated by the SSM install. This will begin with "mi-". + /// This member is required. + public var instanceId: Swift.String? + /// The status of the instance. + public var instanceState: MediaConnectClientTypes.InstanceState? + + public init ( + gatewayArn: Swift.String? = nil, + gatewayInstanceArn: Swift.String? = nil, + instanceId: Swift.String? = nil, + instanceState: MediaConnectClientTypes.InstanceState? = nil + ) + { + self.gatewayArn = gatewayArn + self.gatewayInstanceArn = gatewayInstanceArn + self.instanceId = instanceId + self.instanceState = instanceState + } + } + +} + +extension MediaConnectClientTypes.Maintenance: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case maintenanceDay = "maintenanceDay" + case maintenanceDeadline = "maintenanceDeadline" + case maintenanceScheduledDate = "maintenanceScheduledDate" + case maintenanceStartHour = "maintenanceStartHour" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let maintenanceDay = self.maintenanceDay { + try encodeContainer.encode(maintenanceDay.rawValue, forKey: .maintenanceDay) + } + if let maintenanceDeadline = self.maintenanceDeadline { + try encodeContainer.encode(maintenanceDeadline, forKey: .maintenanceDeadline) + } + if let maintenanceScheduledDate = self.maintenanceScheduledDate { + try encodeContainer.encode(maintenanceScheduledDate, forKey: .maintenanceScheduledDate) + } + if let maintenanceStartHour = self.maintenanceStartHour { + try encodeContainer.encode(maintenanceStartHour, forKey: .maintenanceStartHour) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let maintenanceDayDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.MaintenanceDay.self, forKey: .maintenanceDay) + maintenanceDay = maintenanceDayDecoded + let maintenanceDeadlineDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .maintenanceDeadline) + maintenanceDeadline = maintenanceDeadlineDecoded + let maintenanceScheduledDateDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .maintenanceScheduledDate) + maintenanceScheduledDate = maintenanceScheduledDateDecoded + let maintenanceStartHourDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .maintenanceStartHour) + maintenanceStartHour = maintenanceStartHourDecoded + } +} + +extension MediaConnectClientTypes { + /// The maintenance setting of a flow + public struct Maintenance: Swift.Equatable { + /// A day of a week when the maintenance will happen. Use Monday/Tuesday/Wednesday/Thursday/Friday/Saturday/Sunday. + public var maintenanceDay: MediaConnectClientTypes.MaintenanceDay? + /// The Maintenance has to be performed before this deadline in ISO UTC format. Example: 2021-01-30T08:30:00Z. + public var maintenanceDeadline: Swift.String? + /// A scheduled date in ISO UTC format when the maintenance will happen. Use YYYY-MM-DD format. Example: 2021-01-30. + public var maintenanceScheduledDate: Swift.String? + /// UTC time when the maintenance will happen. Use 24-hour HH:MM format. Minutes must be 00. Example: 13:00. The default value is 02:00. + public var maintenanceStartHour: Swift.String? + + public init ( + maintenanceDay: MediaConnectClientTypes.MaintenanceDay? = nil, + maintenanceDeadline: Swift.String? = nil, + maintenanceScheduledDate: Swift.String? = nil, + maintenanceStartHour: Swift.String? = nil + ) + { + self.maintenanceDay = maintenanceDay + self.maintenanceDeadline = maintenanceDeadline + self.maintenanceScheduledDate = maintenanceScheduledDate + self.maintenanceStartHour = maintenanceStartHour + } + } + +} + +extension MediaConnectClientTypes { + public enum MaintenanceDay: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case friday + case monday + case saturday + case sunday + case thursday + case tuesday + case wednesday + case sdkUnknown(Swift.String) + + public static var allCases: [MaintenanceDay] { + return [ + .friday, + .monday, + .saturday, + .sunday, + .thursday, + .tuesday, + .wednesday, + .sdkUnknown("") + ] + } + 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 .friday: return "Friday" + case .monday: return "Monday" + case .saturday: return "Saturday" + case .sunday: return "Sunday" + case .thursday: return "Thursday" + case .tuesday: return "Tuesday" + case .wednesday: return "Wednesday" + case let .sdkUnknown(s): return s + } + } + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = MaintenanceDay(rawValue: rawValue) ?? MaintenanceDay.sdkUnknown(rawValue) + } + } +} + +extension MediaConnectClientTypes.MediaStream: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case attributes = "attributes" + case clockRate = "clockRate" + case description = "description" + case fmt = "fmt" + case mediaStreamId = "mediaStreamId" + case mediaStreamName = "mediaStreamName" + case mediaStreamType = "mediaStreamType" + case videoFormat = "videoFormat" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let attributes = self.attributes { + try encodeContainer.encode(attributes, forKey: .attributes) + } + if let clockRate = self.clockRate { + try encodeContainer.encode(clockRate, forKey: .clockRate) + } + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let fmt = self.fmt { + try encodeContainer.encode(fmt, forKey: .fmt) + } + if let mediaStreamId = self.mediaStreamId { + try encodeContainer.encode(mediaStreamId, forKey: .mediaStreamId) + } + if let mediaStreamName = self.mediaStreamName { + try encodeContainer.encode(mediaStreamName, forKey: .mediaStreamName) + } + if let mediaStreamType = self.mediaStreamType { + try encodeContainer.encode(mediaStreamType.rawValue, forKey: .mediaStreamType) + } + if let videoFormat = self.videoFormat { + try encodeContainer.encode(videoFormat, forKey: .videoFormat) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let attributesDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.MediaStreamAttributes.self, forKey: .attributes) + attributes = attributesDecoded + let clockRateDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .clockRate) + clockRate = clockRateDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let fmtDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .fmt) + fmt = fmtDecoded + let mediaStreamIdDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .mediaStreamId) + mediaStreamId = mediaStreamIdDecoded + let mediaStreamNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .mediaStreamName) + mediaStreamName = mediaStreamNameDecoded + let mediaStreamTypeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.MediaStreamType.self, forKey: .mediaStreamType) + mediaStreamType = mediaStreamTypeDecoded + let videoFormatDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .videoFormat) + videoFormat = videoFormatDecoded + } +} + +extension MediaConnectClientTypes { + /// A single track or stream of media that contains video, audio, or ancillary data. After you add a media stream to a flow, you can associate it with sources and outputs on that flow, as long as they use the CDI protocol or the ST 2110 JPEG XS protocol. Each source or output can consist of one or many media streams. + public struct MediaStream: Swift.Equatable { + /// Attributes that are related to the media stream. + public var attributes: MediaConnectClientTypes.MediaStreamAttributes? + /// The sample rate for the stream. This value is measured in Hz. + public var clockRate: Swift.Int? + /// A description that can help you quickly identify what your media stream is used for. + public var description: Swift.String? + /// The format type number (sometimes referred to as RTP payload type) of the media stream. MediaConnect assigns this value to the media stream. For ST 2110 JPEG XS outputs, you need to provide this value to the receiver. + /// This member is required. + public var fmt: Swift.Int? + /// A unique identifier for the media stream. + /// This member is required. + public var mediaStreamId: Swift.Int? + /// A name that helps you distinguish one media stream from another. + /// This member is required. + public var mediaStreamName: Swift.String? + /// The type of media stream. + /// This member is required. + public var mediaStreamType: MediaConnectClientTypes.MediaStreamType? + /// The resolution of the video. + public var videoFormat: Swift.String? + + public init ( + attributes: MediaConnectClientTypes.MediaStreamAttributes? = nil, + clockRate: Swift.Int? = nil, + description: Swift.String? = nil, + fmt: Swift.Int? = nil, + mediaStreamId: Swift.Int? = nil, + mediaStreamName: Swift.String? = nil, + mediaStreamType: MediaConnectClientTypes.MediaStreamType? = nil, + videoFormat: Swift.String? = nil + ) + { + self.attributes = attributes + self.clockRate = clockRate + self.description = description + self.fmt = fmt + self.mediaStreamId = mediaStreamId + self.mediaStreamName = mediaStreamName + self.mediaStreamType = mediaStreamType + self.videoFormat = videoFormat + } + } + +} + +extension MediaConnectClientTypes.MediaStreamAttributes: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case fmtp = "fmtp" + case lang = "lang" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let fmtp = self.fmtp { + try encodeContainer.encode(fmtp, forKey: .fmtp) + } + if let lang = self.lang { + try encodeContainer.encode(lang, forKey: .lang) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let fmtpDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Fmtp.self, forKey: .fmtp) + fmtp = fmtpDecoded + let langDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lang) + lang = langDecoded + } +} + +extension MediaConnectClientTypes { + /// Attributes that are related to the media stream. + public struct MediaStreamAttributes: Swift.Equatable { + /// A set of parameters that define the media stream. + /// This member is required. + public var fmtp: MediaConnectClientTypes.Fmtp? + /// The audio language, in a format that is recognized by the receiver. + public var lang: Swift.String? + + public init ( + fmtp: MediaConnectClientTypes.Fmtp? = nil, + lang: Swift.String? = nil + ) + { + self.fmtp = fmtp + self.lang = lang + } + } + +} + +extension MediaConnectClientTypes.MediaStreamAttributesRequest: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case fmtp = "fmtp" + case lang = "lang" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let fmtp = self.fmtp { + try encodeContainer.encode(fmtp, forKey: .fmtp) + } + if let lang = self.lang { + try encodeContainer.encode(lang, forKey: .lang) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let fmtpDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.FmtpRequest.self, forKey: .fmtp) + fmtp = fmtpDecoded + let langDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lang) + lang = langDecoded + } +} + +extension MediaConnectClientTypes { + /// Attributes that are related to the media stream. + public struct MediaStreamAttributesRequest: Swift.Equatable { + /// The settings that you want to use to define the media stream. + public var fmtp: MediaConnectClientTypes.FmtpRequest? + /// The audio language, in a format that is recognized by the receiver. + public var lang: Swift.String? + + public init ( + fmtp: MediaConnectClientTypes.FmtpRequest? = nil, + lang: Swift.String? = nil + ) + { + self.fmtp = fmtp + self.lang = lang + } + } + +} + +extension MediaConnectClientTypes.MediaStreamOutputConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case destinationConfigurations = "destinationConfigurations" + case encodingName = "encodingName" + case encodingParameters = "encodingParameters" + case mediaStreamName = "mediaStreamName" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let destinationConfigurations = destinationConfigurations { + var destinationConfigurationsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .destinationConfigurations) + for destinationconfiguration0 in destinationConfigurations { + try destinationConfigurationsContainer.encode(destinationconfiguration0) + } + } + if let encodingName = self.encodingName { + try encodeContainer.encode(encodingName.rawValue, forKey: .encodingName) + } + if let encodingParameters = self.encodingParameters { + try encodeContainer.encode(encodingParameters, forKey: .encodingParameters) + } + if let mediaStreamName = self.mediaStreamName { + try encodeContainer.encode(mediaStreamName, forKey: .mediaStreamName) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let destinationConfigurationsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.DestinationConfiguration?].self, forKey: .destinationConfigurations) + var destinationConfigurationsDecoded0:[MediaConnectClientTypes.DestinationConfiguration]? = nil + if let destinationConfigurationsContainer = destinationConfigurationsContainer { + destinationConfigurationsDecoded0 = [MediaConnectClientTypes.DestinationConfiguration]() + for structure0 in destinationConfigurationsContainer { + if let structure0 = structure0 { + destinationConfigurationsDecoded0?.append(structure0) + } + } + } + destinationConfigurations = destinationConfigurationsDecoded0 + let encodingNameDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.EncodingName.self, forKey: .encodingName) + encodingName = encodingNameDecoded + let encodingParametersDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.EncodingParameters.self, forKey: .encodingParameters) + encodingParameters = encodingParametersDecoded + let mediaStreamNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .mediaStreamName) + mediaStreamName = mediaStreamNameDecoded + } +} + +extension MediaConnectClientTypes { + /// The media stream that is associated with the output, and the parameters for that association. + public struct MediaStreamOutputConfiguration: Swift.Equatable { + /// The transport parameters that are associated with each outbound media stream. + public var destinationConfigurations: [MediaConnectClientTypes.DestinationConfiguration]? + /// The format that was used to encode the data. For ancillary data streams, set the encoding name to smpte291. For audio streams, set the encoding name to pcm. For video, 2110 streams, set the encoding name to raw. For video, JPEG XS streams, set the encoding name to jxsv. + /// This member is required. + public var encodingName: MediaConnectClientTypes.EncodingName? + /// Encoding parameters + public var encodingParameters: MediaConnectClientTypes.EncodingParameters? + /// The name of the media stream. + /// This member is required. + public var mediaStreamName: Swift.String? + + public init ( + destinationConfigurations: [MediaConnectClientTypes.DestinationConfiguration]? = nil, + encodingName: MediaConnectClientTypes.EncodingName? = nil, + encodingParameters: MediaConnectClientTypes.EncodingParameters? = nil, + mediaStreamName: Swift.String? = nil + ) + { + self.destinationConfigurations = destinationConfigurations + self.encodingName = encodingName + self.encodingParameters = encodingParameters + self.mediaStreamName = mediaStreamName + } + } + +} + +extension MediaConnectClientTypes.MediaStreamOutputConfigurationRequest: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case destinationConfigurations = "destinationConfigurations" + case encodingName = "encodingName" + case encodingParameters = "encodingParameters" + case mediaStreamName = "mediaStreamName" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let destinationConfigurations = destinationConfigurations { + var destinationConfigurationsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .destinationConfigurations) + for destinationconfigurationrequest0 in destinationConfigurations { + try destinationConfigurationsContainer.encode(destinationconfigurationrequest0) + } + } + if let encodingName = self.encodingName { + try encodeContainer.encode(encodingName.rawValue, forKey: .encodingName) + } + if let encodingParameters = self.encodingParameters { + try encodeContainer.encode(encodingParameters, forKey: .encodingParameters) + } + if let mediaStreamName = self.mediaStreamName { + try encodeContainer.encode(mediaStreamName, forKey: .mediaStreamName) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let destinationConfigurationsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.DestinationConfigurationRequest?].self, forKey: .destinationConfigurations) + var destinationConfigurationsDecoded0:[MediaConnectClientTypes.DestinationConfigurationRequest]? = nil + if let destinationConfigurationsContainer = destinationConfigurationsContainer { + destinationConfigurationsDecoded0 = [MediaConnectClientTypes.DestinationConfigurationRequest]() + for structure0 in destinationConfigurationsContainer { + if let structure0 = structure0 { + destinationConfigurationsDecoded0?.append(structure0) + } + } + } + destinationConfigurations = destinationConfigurationsDecoded0 + let encodingNameDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.EncodingName.self, forKey: .encodingName) + encodingName = encodingNameDecoded + let encodingParametersDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.EncodingParametersRequest.self, forKey: .encodingParameters) + encodingParameters = encodingParametersDecoded + let mediaStreamNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .mediaStreamName) + mediaStreamName = mediaStreamNameDecoded + } +} + +extension MediaConnectClientTypes { + /// The media stream that you want to associate with the output, and the parameters for that association. + public struct MediaStreamOutputConfigurationRequest: Swift.Equatable { + /// The transport parameters that you want to associate with the media stream. + public var destinationConfigurations: [MediaConnectClientTypes.DestinationConfigurationRequest]? + /// The format that will be used to encode the data. For ancillary data streams, set the encoding name to smpte291. For audio streams, set the encoding name to pcm. For video, 2110 streams, set the encoding name to raw. For video, JPEG XS streams, set the encoding name to jxsv. + /// This member is required. + public var encodingName: MediaConnectClientTypes.EncodingName? + /// A collection of parameters that determine how MediaConnect will convert the content. These fields only apply to outputs on flows that have a CDI source. + public var encodingParameters: MediaConnectClientTypes.EncodingParametersRequest? + /// The name of the media stream that is associated with the output. + /// This member is required. + public var mediaStreamName: Swift.String? + + public init ( + destinationConfigurations: [MediaConnectClientTypes.DestinationConfigurationRequest]? = nil, + encodingName: MediaConnectClientTypes.EncodingName? = nil, + encodingParameters: MediaConnectClientTypes.EncodingParametersRequest? = nil, + mediaStreamName: Swift.String? = nil + ) + { + self.destinationConfigurations = destinationConfigurations + self.encodingName = encodingName + self.encodingParameters = encodingParameters + self.mediaStreamName = mediaStreamName + } + } + +} + +extension MediaConnectClientTypes.MediaStreamSourceConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case encodingName = "encodingName" + case inputConfigurations = "inputConfigurations" + case mediaStreamName = "mediaStreamName" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let encodingName = self.encodingName { + try encodeContainer.encode(encodingName.rawValue, forKey: .encodingName) + } + if let inputConfigurations = inputConfigurations { + var inputConfigurationsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .inputConfigurations) + for inputconfiguration0 in inputConfigurations { + try inputConfigurationsContainer.encode(inputconfiguration0) + } + } + if let mediaStreamName = self.mediaStreamName { + try encodeContainer.encode(mediaStreamName, forKey: .mediaStreamName) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let encodingNameDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.EncodingName.self, forKey: .encodingName) + encodingName = encodingNameDecoded + let inputConfigurationsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.InputConfiguration?].self, forKey: .inputConfigurations) + var inputConfigurationsDecoded0:[MediaConnectClientTypes.InputConfiguration]? = nil + if let inputConfigurationsContainer = inputConfigurationsContainer { + inputConfigurationsDecoded0 = [MediaConnectClientTypes.InputConfiguration]() + for structure0 in inputConfigurationsContainer { + if let structure0 = structure0 { + inputConfigurationsDecoded0?.append(structure0) + } + } + } + inputConfigurations = inputConfigurationsDecoded0 + let mediaStreamNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .mediaStreamName) + mediaStreamName = mediaStreamNameDecoded + } +} + +extension MediaConnectClientTypes { + /// The media stream that is associated with the source, and the parameters for that association. + public struct MediaStreamSourceConfiguration: Swift.Equatable { + /// The format that was used to encode the data. For ancillary data streams, set the encoding name to smpte291. For audio streams, set the encoding name to pcm. For video, 2110 streams, set the encoding name to raw. For video, JPEG XS streams, set the encoding name to jxsv. + /// This member is required. + public var encodingName: MediaConnectClientTypes.EncodingName? + /// The transport parameters that are associated with an incoming media stream. + public var inputConfigurations: [MediaConnectClientTypes.InputConfiguration]? + /// The name of the media stream. + /// This member is required. + public var mediaStreamName: Swift.String? + + public init ( + encodingName: MediaConnectClientTypes.EncodingName? = nil, + inputConfigurations: [MediaConnectClientTypes.InputConfiguration]? = nil, + mediaStreamName: Swift.String? = nil + ) + { + self.encodingName = encodingName + self.inputConfigurations = inputConfigurations + self.mediaStreamName = mediaStreamName + } + } + +} + +extension MediaConnectClientTypes.MediaStreamSourceConfigurationRequest: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case encodingName = "encodingName" + case inputConfigurations = "inputConfigurations" + case mediaStreamName = "mediaStreamName" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let encodingName = self.encodingName { + try encodeContainer.encode(encodingName.rawValue, forKey: .encodingName) + } + if let inputConfigurations = inputConfigurations { + var inputConfigurationsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .inputConfigurations) + for inputconfigurationrequest0 in inputConfigurations { + try inputConfigurationsContainer.encode(inputconfigurationrequest0) + } + } + if let mediaStreamName = self.mediaStreamName { + try encodeContainer.encode(mediaStreamName, forKey: .mediaStreamName) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let encodingNameDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.EncodingName.self, forKey: .encodingName) + encodingName = encodingNameDecoded + let inputConfigurationsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.InputConfigurationRequest?].self, forKey: .inputConfigurations) + var inputConfigurationsDecoded0:[MediaConnectClientTypes.InputConfigurationRequest]? = nil + if let inputConfigurationsContainer = inputConfigurationsContainer { + inputConfigurationsDecoded0 = [MediaConnectClientTypes.InputConfigurationRequest]() + for structure0 in inputConfigurationsContainer { + if let structure0 = structure0 { + inputConfigurationsDecoded0?.append(structure0) + } + } + } + inputConfigurations = inputConfigurationsDecoded0 + let mediaStreamNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .mediaStreamName) + mediaStreamName = mediaStreamNameDecoded + } +} + +extension MediaConnectClientTypes { + /// The definition of a media stream that you want to associate with the source. + public struct MediaStreamSourceConfigurationRequest: Swift.Equatable { + /// The format you want to use to encode the data. For ancillary data streams, set the encoding name to smpte291. For audio streams, set the encoding name to pcm. For video, 2110 streams, set the encoding name to raw. For video, JPEG XS streams, set the encoding name to jxsv. + /// This member is required. + public var encodingName: MediaConnectClientTypes.EncodingName? + /// The transport parameters that you want to associate with the media stream. + public var inputConfigurations: [MediaConnectClientTypes.InputConfigurationRequest]? + /// The name of the media stream. + /// This member is required. + public var mediaStreamName: Swift.String? + + public init ( + encodingName: MediaConnectClientTypes.EncodingName? = nil, + inputConfigurations: [MediaConnectClientTypes.InputConfigurationRequest]? = nil, + mediaStreamName: Swift.String? = nil + ) + { + self.encodingName = encodingName + self.inputConfigurations = inputConfigurations + self.mediaStreamName = mediaStreamName + } + } + +} + +extension MediaConnectClientTypes { + public enum MediaStreamType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case ancillaryData + case audio + case video + case sdkUnknown(Swift.String) + + public static var allCases: [MediaStreamType] { + return [ + .ancillaryData, + .audio, + .video, + .sdkUnknown("") + ] + } + 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 .ancillaryData: return "ancillary-data" + case .audio: return "audio" + case .video: return "video" + case let .sdkUnknown(s): return s + } + } + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = MediaStreamType(rawValue: rawValue) ?? MediaStreamType.sdkUnknown(rawValue) + } + } +} + +extension MediaConnectClientTypes.MessageDetail: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case code = "code" + case message = "message" + case resourceName = "resourceName" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let code = self.code { + try encodeContainer.encode(code, forKey: .code) + } + if let message = self.message { + try encodeContainer.encode(message, forKey: .message) + } + if let resourceName = self.resourceName { + try encodeContainer.encode(resourceName, forKey: .resourceName) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let codeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .code) + code = codeDecoded + let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) + message = messageDecoded + let resourceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceName) + resourceName = resourceNameDecoded + } +} + +extension MediaConnectClientTypes { + public struct MessageDetail: Swift.Equatable { + /// The error code. + /// This member is required. + public var code: Swift.String? + /// The specific error message that MediaConnect returns to help you understand the reason that the request did not succeed. + /// This member is required. + public var message: Swift.String? + /// The name of the resource. + public var resourceName: Swift.String? + + public init ( + code: Swift.String? = nil, + message: Swift.String? = nil, + resourceName: Swift.String? = nil + ) + { + self.code = code + self.message = message + self.resourceName = resourceName + } + } + +} + +extension MediaConnectClientTypes.Messages: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case errors = "errors" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let errors = errors { + var errorsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .errors) + for __string0 in errors { + try errorsContainer.encode(__string0) + } + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let errorsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .errors) + var errorsDecoded0:[Swift.String]? = nil + if let errorsContainer = errorsContainer { + errorsDecoded0 = [Swift.String]() + for string0 in errorsContainer { + if let string0 = string0 { + errorsDecoded0?.append(string0) + } + } + } + errors = errorsDecoded0 + } +} + +extension MediaConnectClientTypes { + /// Messages that provide the state of the flow. + public struct Messages: Swift.Equatable { + /// A list of errors that might have been generated from processes on this flow. + /// This member is required. + public var errors: [Swift.String]? + + public init ( + errors: [Swift.String]? = nil + ) + { + self.errors = errors + } + } + +} + +extension MediaConnectClientTypes { + public enum NetworkInterfaceType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case efa + case ena + case sdkUnknown(Swift.String) + + public static var allCases: [NetworkInterfaceType] { + return [ + .efa, + .ena, + .sdkUnknown("") + ] + } + 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 .efa: return "efa" + case .ena: return "ena" + case let .sdkUnknown(s): return s + } + } + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = NetworkInterfaceType(rawValue: rawValue) ?? NetworkInterfaceType.sdkUnknown(rawValue) + } + } +} + +extension NotFoundException { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: NotFoundExceptionBody = try responseDecoder.decode(responseBody: data) + self.message = output.message + } else { + self.message = nil + } + self._headers = httpResponse.headers + self._statusCode = httpResponse.statusCode + self._requestID = requestID + self._message = message + } +} + +/// Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception. +public struct NotFoundException: AWSClientRuntime.AWSHttpServiceError, Swift.Equatable { + public var _headers: ClientRuntime.Headers? + public var _statusCode: ClientRuntime.HttpStatusCode? + public var _message: Swift.String? + public var _requestID: Swift.String? + public var _retryable: Swift.Bool = false + public var _isThrottling: Swift.Bool = false + public var _type: ClientRuntime.ErrorType = .client + /// The error message returned by AWS Elemental MediaConnect. + /// This member is required. + public var message: Swift.String? + + public init ( + message: Swift.String? = nil + ) + { + self.message = message + } +} + +struct NotFoundExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension NotFoundExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case message = "message" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) + message = messageDecoded + } +} + +extension MediaConnectClientTypes.Offering: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case currencyCode = "currencyCode" + case duration = "duration" + case durationUnits = "durationUnits" + case offeringArn = "offeringArn" + case offeringDescription = "offeringDescription" + case pricePerUnit = "pricePerUnit" + case priceUnits = "priceUnits" + case resourceSpecification = "resourceSpecification" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let currencyCode = self.currencyCode { + try encodeContainer.encode(currencyCode, forKey: .currencyCode) + } + if let duration = self.duration { + try encodeContainer.encode(duration, forKey: .duration) + } + if let durationUnits = self.durationUnits { + try encodeContainer.encode(durationUnits.rawValue, forKey: .durationUnits) + } + if let offeringArn = self.offeringArn { + try encodeContainer.encode(offeringArn, forKey: .offeringArn) + } + if let offeringDescription = self.offeringDescription { + try encodeContainer.encode(offeringDescription, forKey: .offeringDescription) + } + if let pricePerUnit = self.pricePerUnit { + try encodeContainer.encode(pricePerUnit, forKey: .pricePerUnit) + } + if let priceUnits = self.priceUnits { + try encodeContainer.encode(priceUnits.rawValue, forKey: .priceUnits) + } + if let resourceSpecification = self.resourceSpecification { + try encodeContainer.encode(resourceSpecification, forKey: .resourceSpecification) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let currencyCodeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .currencyCode) + currencyCode = currencyCodeDecoded + let durationDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .duration) + duration = durationDecoded + let durationUnitsDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.DurationUnits.self, forKey: .durationUnits) + durationUnits = durationUnitsDecoded + let offeringArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .offeringArn) + offeringArn = offeringArnDecoded + let offeringDescriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .offeringDescription) + offeringDescription = offeringDescriptionDecoded + let pricePerUnitDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .pricePerUnit) + pricePerUnit = pricePerUnitDecoded + let priceUnitsDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.PriceUnits.self, forKey: .priceUnits) + priceUnits = priceUnitsDecoded + let resourceSpecificationDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ResourceSpecification.self, forKey: .resourceSpecification) + resourceSpecification = resourceSpecificationDecoded + } +} + +extension MediaConnectClientTypes { + /// A savings plan that reserves a certain amount of outbound bandwidth usage at a discounted rate each month over a period of time. + public struct Offering: Swift.Equatable { + /// The type of currency that is used for billing. The currencyCode used for all reservations is US dollars. + /// This member is required. + public var currencyCode: Swift.String? + /// The length of time that your reservation would be active. + /// This member is required. + public var duration: Swift.Int? + /// The unit of measurement for the duration of the offering. + /// This member is required. + public var durationUnits: MediaConnectClientTypes.DurationUnits? + /// The Amazon Resource Name (ARN) that MediaConnect assigns to the offering. + /// This member is required. + public var offeringArn: Swift.String? + /// A description of the offering. + /// This member is required. + public var offeringDescription: Swift.String? + /// The cost of a single unit. This value, in combination with priceUnits, makes up the rate. + /// This member is required. + public var pricePerUnit: Swift.String? + /// The unit of measurement that is used for billing. This value, in combination with pricePerUnit, makes up the rate. + /// This member is required. + public var priceUnits: MediaConnectClientTypes.PriceUnits? + /// A definition of the amount of outbound bandwidth that you would be reserving if you purchase the offering. + /// This member is required. + public var resourceSpecification: MediaConnectClientTypes.ResourceSpecification? + + public init ( + currencyCode: Swift.String? = nil, + duration: Swift.Int? = nil, + durationUnits: MediaConnectClientTypes.DurationUnits? = nil, + offeringArn: Swift.String? = nil, + offeringDescription: Swift.String? = nil, + pricePerUnit: Swift.String? = nil, + priceUnits: MediaConnectClientTypes.PriceUnits? = nil, + resourceSpecification: MediaConnectClientTypes.ResourceSpecification? = nil + ) + { + self.currencyCode = currencyCode + self.duration = duration + self.durationUnits = durationUnits + self.offeringArn = offeringArn + self.offeringDescription = offeringDescription + self.pricePerUnit = pricePerUnit + self.priceUnits = priceUnits + self.resourceSpecification = resourceSpecification + } + } + +} + +extension MediaConnectClientTypes.Output: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case bridgeArn = "bridgeArn" + case bridgePorts = "bridgePorts" + case dataTransferSubscriberFeePercent = "dataTransferSubscriberFeePercent" + case description = "description" + case destination = "destination" + case encryption = "encryption" + case entitlementArn = "entitlementArn" + case listenerAddress = "listenerAddress" + case mediaLiveInputArn = "mediaLiveInputArn" + case mediaStreamOutputConfigurations = "mediaStreamOutputConfigurations" + case name = "name" + case outputArn = "outputArn" + case port = "port" + case transport = "transport" + case vpcInterfaceAttachment = "vpcInterfaceAttachment" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let bridgeArn = self.bridgeArn { + try encodeContainer.encode(bridgeArn, forKey: .bridgeArn) + } + if let bridgePorts = bridgePorts { + var bridgePortsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .bridgePorts) + for __integer0 in bridgePorts { + try bridgePortsContainer.encode(__integer0) + } + } + if let dataTransferSubscriberFeePercent = self.dataTransferSubscriberFeePercent { + try encodeContainer.encode(dataTransferSubscriberFeePercent, forKey: .dataTransferSubscriberFeePercent) + } + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let destination = self.destination { + try encodeContainer.encode(destination, forKey: .destination) + } + if let encryption = self.encryption { + try encodeContainer.encode(encryption, forKey: .encryption) + } + if let entitlementArn = self.entitlementArn { + try encodeContainer.encode(entitlementArn, forKey: .entitlementArn) + } + if let listenerAddress = self.listenerAddress { + try encodeContainer.encode(listenerAddress, forKey: .listenerAddress) + } + if let mediaLiveInputArn = self.mediaLiveInputArn { + try encodeContainer.encode(mediaLiveInputArn, forKey: .mediaLiveInputArn) + } + if let mediaStreamOutputConfigurations = mediaStreamOutputConfigurations { + var mediaStreamOutputConfigurationsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .mediaStreamOutputConfigurations) + for mediastreamoutputconfiguration0 in mediaStreamOutputConfigurations { + try mediaStreamOutputConfigurationsContainer.encode(mediastreamoutputconfiguration0) + } + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let outputArn = self.outputArn { + try encodeContainer.encode(outputArn, forKey: .outputArn) + } + if let port = self.port { + try encodeContainer.encode(port, forKey: .port) + } + if let transport = self.transport { + try encodeContainer.encode(transport, forKey: .transport) + } + if let vpcInterfaceAttachment = self.vpcInterfaceAttachment { + try encodeContainer.encode(vpcInterfaceAttachment, forKey: .vpcInterfaceAttachment) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let dataTransferSubscriberFeePercentDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .dataTransferSubscriberFeePercent) + dataTransferSubscriberFeePercent = dataTransferSubscriberFeePercentDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let destinationDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .destination) + destination = destinationDecoded + let encryptionDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Encryption.self, forKey: .encryption) + encryption = encryptionDecoded + let entitlementArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .entitlementArn) + entitlementArn = entitlementArnDecoded + let listenerAddressDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .listenerAddress) + listenerAddress = listenerAddressDecoded + let mediaLiveInputArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .mediaLiveInputArn) + mediaLiveInputArn = mediaLiveInputArnDecoded + let mediaStreamOutputConfigurationsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.MediaStreamOutputConfiguration?].self, forKey: .mediaStreamOutputConfigurations) + var mediaStreamOutputConfigurationsDecoded0:[MediaConnectClientTypes.MediaStreamOutputConfiguration]? = nil + if let mediaStreamOutputConfigurationsContainer = mediaStreamOutputConfigurationsContainer { + mediaStreamOutputConfigurationsDecoded0 = [MediaConnectClientTypes.MediaStreamOutputConfiguration]() + for structure0 in mediaStreamOutputConfigurationsContainer { + if let structure0 = structure0 { + mediaStreamOutputConfigurationsDecoded0?.append(structure0) + } + } + } + mediaStreamOutputConfigurations = mediaStreamOutputConfigurationsDecoded0 + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let outputArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .outputArn) + outputArn = outputArnDecoded + let portDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .port) + port = portDecoded + let transportDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Transport.self, forKey: .transport) + transport = transportDecoded + let vpcInterfaceAttachmentDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.VpcInterfaceAttachment.self, forKey: .vpcInterfaceAttachment) + vpcInterfaceAttachment = vpcInterfaceAttachmentDecoded + let bridgeArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .bridgeArn) + bridgeArn = bridgeArnDecoded + let bridgePortsContainer = try containerValues.decodeIfPresent([Swift.Int?].self, forKey: .bridgePorts) + var bridgePortsDecoded0:[Swift.Int]? = nil + if let bridgePortsContainer = bridgePortsContainer { + bridgePortsDecoded0 = [Swift.Int]() + for integer0 in bridgePortsContainer { + if let integer0 = integer0 { + bridgePortsDecoded0?.append(integer0) + } + } + } + bridgePorts = bridgePortsDecoded0 + } +} + +extension MediaConnectClientTypes { + /// The settings for an output. + public struct Output: Swift.Equatable { + /// The ARN of the bridge that added this output. + public var bridgeArn: Swift.String? + /// The bridge output ports currently in use. + public var bridgePorts: [Swift.Int]? + /// Percentage from 0-100 of the data transfer cost to be billed to the subscriber. + public var dataTransferSubscriberFeePercent: Swift.Int? + /// A description of the output. + public var description: Swift.String? + /// The address where you want to send the output. + public var destination: Swift.String? + /// The type of key used for the encryption. If no keyType is provided, the service will use the default setting (static-key). + public var encryption: MediaConnectClientTypes.Encryption? + /// The ARN of the entitlement on the originator''s flow. This value is relevant only on entitled flows. + public var entitlementArn: Swift.String? + /// The IP address that the receiver requires in order to establish a connection with the flow. For public networking, the ListenerAddress is represented by the elastic IP address of the flow. For private networking, the ListenerAddress is represented by the elastic network interface IP address of the VPC. This field applies only to outputs that use the Zixi pull or SRT listener protocol. + public var listenerAddress: Swift.String? + /// The input ARN of the AWS Elemental MediaLive channel. This parameter is relevant only for outputs that were added by creating a MediaLive input. + public var mediaLiveInputArn: Swift.String? + /// The configuration for each media stream that is associated with the output. + public var mediaStreamOutputConfigurations: [MediaConnectClientTypes.MediaStreamOutputConfiguration]? + /// The name of the output. This value must be unique within the current flow. + /// This member is required. + public var name: Swift.String? + /// The ARN of the output. + /// This member is required. + public var outputArn: Swift.String? + /// The port to use when content is distributed to this output. + public var port: Swift.Int? + /// Attributes related to the transport stream that are used in the output. + public var transport: MediaConnectClientTypes.Transport? + /// The name of the VPC interface attachment to use for this output. + public var vpcInterfaceAttachment: MediaConnectClientTypes.VpcInterfaceAttachment? + + public init ( + bridgeArn: Swift.String? = nil, + bridgePorts: [Swift.Int]? = nil, + dataTransferSubscriberFeePercent: Swift.Int? = nil, + description: Swift.String? = nil, + destination: Swift.String? = nil, + encryption: MediaConnectClientTypes.Encryption? = nil, + entitlementArn: Swift.String? = nil, + listenerAddress: Swift.String? = nil, + mediaLiveInputArn: Swift.String? = nil, + mediaStreamOutputConfigurations: [MediaConnectClientTypes.MediaStreamOutputConfiguration]? = nil, + name: Swift.String? = nil, + outputArn: Swift.String? = nil, + port: Swift.Int? = nil, + transport: MediaConnectClientTypes.Transport? = nil, + vpcInterfaceAttachment: MediaConnectClientTypes.VpcInterfaceAttachment? = nil + ) + { + self.bridgeArn = bridgeArn + self.bridgePorts = bridgePorts + self.dataTransferSubscriberFeePercent = dataTransferSubscriberFeePercent + self.description = description + self.destination = destination + self.encryption = encryption + self.entitlementArn = entitlementArn + self.listenerAddress = listenerAddress + self.mediaLiveInputArn = mediaLiveInputArn + self.mediaStreamOutputConfigurations = mediaStreamOutputConfigurations + self.name = name + self.outputArn = outputArn + self.port = port + self.transport = transport + self.vpcInterfaceAttachment = vpcInterfaceAttachment + } + } + +} + +extension MediaConnectClientTypes { + public enum PriceUnits: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case hourly + case sdkUnknown(Swift.String) + + public static var allCases: [PriceUnits] { + return [ + .hourly, + .sdkUnknown("") + ] + } + 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 .hourly: return "HOURLY" + case let .sdkUnknown(s): return s + } + } + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = PriceUnits(rawValue: rawValue) ?? PriceUnits.sdkUnknown(rawValue) + } + } +} + +extension MediaConnectClientTypes { + public enum ModelProtocol: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case cdi + case fujitsuQos + case rist + case rtp + case rtpFec + case srtCaller + case srtListener + case st2110Jpegxs + case udp + case zixiPull + case zixiPush + case sdkUnknown(Swift.String) + + public static var allCases: [ModelProtocol] { + return [ + .cdi, + .fujitsuQos, + .rist, + .rtp, + .rtpFec, + .srtCaller, + .srtListener, + .st2110Jpegxs, + .udp, + .zixiPull, + .zixiPush, + .sdkUnknown("") + ] + } + 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 .cdi: return "cdi" + case .fujitsuQos: return "fujitsu-qos" + case .rist: return "rist" + case .rtp: return "rtp" + case .rtpFec: return "rtp-fec" + case .srtCaller: return "srt-caller" + case .srtListener: return "srt-listener" + case .st2110Jpegxs: return "st2110-jpegxs" + case .udp: return "udp" + case .zixiPull: return "zixi-pull" + case .zixiPush: return "zixi-push" + case let .sdkUnknown(s): return s + } + } + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = ModelProtocol(rawValue: rawValue) ?? ModelProtocol.sdkUnknown(rawValue) + } + } +} + +extension PurchaseOfferingInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case reservationName = "reservationName" + case start = "start" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let reservationName = self.reservationName { + try encodeContainer.encode(reservationName, forKey: .reservationName) + } + if let start = self.start { + try encodeContainer.encode(start, forKey: .start) + } + } +} + +extension PurchaseOfferingInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let offeringArn = offeringArn else { + return nil + } + return "/v1/offerings/\(offeringArn.urlPercentEncoding())" + } +} + +/// A request to purchase a offering. +public struct PurchaseOfferingInput: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the offering. + /// This member is required. + public var offeringArn: Swift.String? + /// The name that you want to use for the reservation. + /// This member is required. + public var reservationName: Swift.String? + /// The date and time that you want the reservation to begin, in Coordinated Universal Time (UTC). You can specify any date and time between 12:00am on the first day of the current month to the current time on today's date, inclusive. Specify the start in a 24-hour notation. Use the following format: YYYY-MM-DDTHH:mm:SSZ, where T and Z are literal characters. For example, to specify 11:30pm on March 5, 2020, enter 2020-03-05T23:30:00Z. + /// This member is required. + public var start: Swift.String? + + public init ( + offeringArn: Swift.String? = nil, + reservationName: Swift.String? = nil, + start: Swift.String? = nil + ) + { + self.offeringArn = offeringArn + self.reservationName = reservationName + self.start = start + } +} + +struct PurchaseOfferingInputBody: Swift.Equatable { + let reservationName: Swift.String? + let start: Swift.String? +} + +extension PurchaseOfferingInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case reservationName = "reservationName" + case start = "start" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let reservationNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .reservationName) + reservationName = reservationNameDecoded + let startDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .start) + start = startDecoded + } +} + +extension PurchaseOfferingOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} + +extension PurchaseOfferingOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + } + } +} + +public enum PurchaseOfferingOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case forbiddenException(ForbiddenException) + case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) +} + +extension PurchaseOfferingOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: PurchaseOfferingOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.reservation = output.reservation + } else { + self.reservation = nil + } + } +} + +public struct PurchaseOfferingOutputResponse: Swift.Equatable { + /// A pricing agreement for a discounted rate for a specific outbound bandwidth that your MediaConnect account will use each month over a specific time period. The discounted rate in the reservation applies to outbound bandwidth for all flows from your account until your account reaches the amount of bandwidth in your reservation. If you use more outbound bandwidth than the agreed upon amount in a single month, the overage is charged at the on-demand rate. + public var reservation: MediaConnectClientTypes.Reservation? + + public init ( + reservation: MediaConnectClientTypes.Reservation? = nil + ) + { + self.reservation = reservation + } +} + +struct PurchaseOfferingOutputResponseBody: Swift.Equatable { + let reservation: MediaConnectClientTypes.Reservation? +} + +extension PurchaseOfferingOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case reservation = "reservation" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let reservationDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Reservation.self, forKey: .reservation) + reservation = reservationDecoded + } +} + +extension MediaConnectClientTypes { + public enum Range: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case full + case fullprotect + case narrow + case sdkUnknown(Swift.String) + + public static var allCases: [Range] { + return [ + .full, + .fullprotect, + .narrow, + .sdkUnknown("") + ] + } + 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 .full: return "FULL" + case .fullprotect: return "FULLPROTECT" + case .narrow: return "NARROW" + case let .sdkUnknown(s): return s + } + } + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = Range(rawValue: rawValue) ?? Range.sdkUnknown(rawValue) + } + } +} + +extension RemoveBridgeOutputInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let bridgeArn = bridgeArn else { + return nil + } + guard let outputName = outputName else { + return nil + } + return "/v1/bridges/\(bridgeArn.urlPercentEncoding())/outputs/\(outputName.urlPercentEncoding())" + } +} + +public struct RemoveBridgeOutputInput: Swift.Equatable { + /// The ARN of the bridge that you want to update. + /// This member is required. + public var bridgeArn: Swift.String? + /// The name of the bridge output that you want to remove. + /// This member is required. + public var outputName: Swift.String? + + public init ( + bridgeArn: Swift.String? = nil, + outputName: Swift.String? = nil + ) + { + self.bridgeArn = bridgeArn + self.outputName = outputName + } +} + +struct RemoveBridgeOutputInputBody: Swift.Equatable { +} + +extension RemoveBridgeOutputInputBody: Swift.Decodable { + + public init (from decoder: Swift.Decoder) throws { + } +} + +extension RemoveBridgeOutputOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} + +extension RemoveBridgeOutputOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ConflictException" : self = .conflictException(try ConflictException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + } + } +} + +public enum RemoveBridgeOutputOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case conflictException(ConflictException) + case forbiddenException(ForbiddenException) + case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) +} + +extension RemoveBridgeOutputOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: RemoveBridgeOutputOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.bridgeArn = output.bridgeArn + self.outputName = output.outputName + } else { + self.bridgeArn = nil + self.outputName = nil + } + } +} + +public struct RemoveBridgeOutputOutputResponse: Swift.Equatable { + public var bridgeArn: Swift.String? + public var outputName: Swift.String? + + public init ( + bridgeArn: Swift.String? = nil, + outputName: Swift.String? = nil + ) + { + self.bridgeArn = bridgeArn + self.outputName = outputName + } +} + +struct RemoveBridgeOutputOutputResponseBody: Swift.Equatable { + let bridgeArn: Swift.String? + let outputName: Swift.String? +} + +extension RemoveBridgeOutputOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case bridgeArn = "bridgeArn" + case outputName = "outputName" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let bridgeArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .bridgeArn) + bridgeArn = bridgeArnDecoded + let outputNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .outputName) + outputName = outputNameDecoded + } +} + +extension RemoveBridgeSourceInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let bridgeArn = bridgeArn else { + return nil + } + guard let sourceName = sourceName else { + return nil + } + return "/v1/bridges/\(bridgeArn.urlPercentEncoding())/sources/\(sourceName.urlPercentEncoding())" + } +} + +public struct RemoveBridgeSourceInput: Swift.Equatable { + /// The ARN of the bridge that you want to update. + /// This member is required. + public var bridgeArn: Swift.String? + /// The name of the bridge source that you want to remove. + /// This member is required. + public var sourceName: Swift.String? + + public init ( + bridgeArn: Swift.String? = nil, + sourceName: Swift.String? = nil + ) + { + self.bridgeArn = bridgeArn + self.sourceName = sourceName + } +} + +struct RemoveBridgeSourceInputBody: Swift.Equatable { +} + +extension RemoveBridgeSourceInputBody: Swift.Decodable { + + public init (from decoder: Swift.Decoder) throws { + } +} + +extension RemoveBridgeSourceOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} + +extension RemoveBridgeSourceOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ConflictException" : self = .conflictException(try ConflictException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + } + } +} + +public enum RemoveBridgeSourceOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case conflictException(ConflictException) + case forbiddenException(ForbiddenException) + case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) +} + +extension RemoveBridgeSourceOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: RemoveBridgeSourceOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.bridgeArn = output.bridgeArn + self.sourceName = output.sourceName + } else { + self.bridgeArn = nil + self.sourceName = nil + } + } +} + +public struct RemoveBridgeSourceOutputResponse: Swift.Equatable { + public var bridgeArn: Swift.String? + public var sourceName: Swift.String? + + public init ( + bridgeArn: Swift.String? = nil, + sourceName: Swift.String? = nil + ) + { + self.bridgeArn = bridgeArn + self.sourceName = sourceName + } +} + +struct RemoveBridgeSourceOutputResponseBody: Swift.Equatable { + let bridgeArn: Swift.String? + let sourceName: Swift.String? +} + +extension RemoveBridgeSourceOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case bridgeArn = "bridgeArn" + case sourceName = "sourceName" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let bridgeArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .bridgeArn) + bridgeArn = bridgeArnDecoded + let sourceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sourceName) + sourceName = sourceNameDecoded + } +} + +extension RemoveFlowMediaStreamInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let flowArn = flowArn else { + return nil + } + guard let mediaStreamName = mediaStreamName else { + return nil + } + return "/v1/flows/\(flowArn.urlPercentEncoding())/mediaStreams/\(mediaStreamName.urlPercentEncoding())" + } +} + +public struct RemoveFlowMediaStreamInput: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the flow. + /// This member is required. + public var flowArn: Swift.String? + /// The name of the media stream that you want to remove. + /// This member is required. + public var mediaStreamName: Swift.String? + + public init ( + flowArn: Swift.String? = nil, + mediaStreamName: Swift.String? = nil + ) + { + self.flowArn = flowArn + self.mediaStreamName = mediaStreamName + } +} + +struct RemoveFlowMediaStreamInputBody: Swift.Equatable { +} + +extension RemoveFlowMediaStreamInputBody: Swift.Decodable { + + public init (from decoder: Swift.Decoder) throws { + } +} + +extension RemoveFlowMediaStreamOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} + +extension RemoveFlowMediaStreamOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + } + } +} + +public enum RemoveFlowMediaStreamOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case forbiddenException(ForbiddenException) + case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) +} + +extension RemoveFlowMediaStreamOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: RemoveFlowMediaStreamOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.flowArn = output.flowArn + self.mediaStreamName = output.mediaStreamName + } else { + self.flowArn = nil + self.mediaStreamName = nil + } + } +} + +public struct RemoveFlowMediaStreamOutputResponse: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the flow. + public var flowArn: Swift.String? + /// The name of the media stream that was removed. + public var mediaStreamName: Swift.String? + + public init ( + flowArn: Swift.String? = nil, + mediaStreamName: Swift.String? = nil + ) + { + self.flowArn = flowArn + self.mediaStreamName = mediaStreamName + } +} + +struct RemoveFlowMediaStreamOutputResponseBody: Swift.Equatable { + let flowArn: Swift.String? + let mediaStreamName: Swift.String? +} + +extension RemoveFlowMediaStreamOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case flowArn = "flowArn" + case mediaStreamName = "mediaStreamName" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) + flowArn = flowArnDecoded + let mediaStreamNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .mediaStreamName) + mediaStreamName = mediaStreamNameDecoded + } +} + +extension RemoveFlowOutputInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let flowArn = flowArn else { + return nil + } + guard let outputArn = outputArn else { + return nil + } + return "/v1/flows/\(flowArn.urlPercentEncoding())/outputs/\(outputArn.urlPercentEncoding())" + } +} + +public struct RemoveFlowOutputInput: Swift.Equatable { + /// The flow that you want to remove an output from. + /// This member is required. + public var flowArn: Swift.String? + /// The ARN of the output that you want to remove. + /// This member is required. + public var outputArn: Swift.String? + + public init ( + flowArn: Swift.String? = nil, + outputArn: Swift.String? = nil + ) + { + self.flowArn = flowArn + self.outputArn = outputArn + } +} + +struct RemoveFlowOutputInputBody: Swift.Equatable { +} + +extension RemoveFlowOutputInputBody: Swift.Decodable { + + public init (from decoder: Swift.Decoder) throws { + } +} + +extension RemoveFlowOutputOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} + +extension RemoveFlowOutputOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + } + } +} + +public enum RemoveFlowOutputOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case forbiddenException(ForbiddenException) + case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) +} + +extension RemoveFlowOutputOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: RemoveFlowOutputOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.flowArn = output.flowArn + self.outputArn = output.outputArn + } else { + self.flowArn = nil + self.outputArn = nil + } + } +} + +public struct RemoveFlowOutputOutputResponse: Swift.Equatable { + /// The ARN of the flow that is associated with the output you removed. + public var flowArn: Swift.String? + /// The ARN of the output that was removed. + public var outputArn: Swift.String? + + public init ( + flowArn: Swift.String? = nil, + outputArn: Swift.String? = nil + ) + { + self.flowArn = flowArn + self.outputArn = outputArn + } +} + +struct RemoveFlowOutputOutputResponseBody: Swift.Equatable { + let flowArn: Swift.String? + let outputArn: Swift.String? +} + +extension RemoveFlowOutputOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case flowArn = "flowArn" + case outputArn = "outputArn" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) + flowArn = flowArnDecoded + let outputArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .outputArn) + outputArn = outputArnDecoded + } +} + +extension RemoveFlowSourceInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let flowArn = flowArn else { + return nil + } + guard let sourceArn = sourceArn else { + return nil + } + return "/v1/flows/\(flowArn.urlPercentEncoding())/source/\(sourceArn.urlPercentEncoding())" + } +} + +public struct RemoveFlowSourceInput: Swift.Equatable { + /// The flow that you want to remove a source from. + /// This member is required. + public var flowArn: Swift.String? + /// The ARN of the source that you want to remove. + /// This member is required. + public var sourceArn: Swift.String? + + public init ( + flowArn: Swift.String? = nil, + sourceArn: Swift.String? = nil + ) + { + self.flowArn = flowArn + self.sourceArn = sourceArn + } +} + +struct RemoveFlowSourceInputBody: Swift.Equatable { +} + +extension RemoveFlowSourceInputBody: Swift.Decodable { + + public init (from decoder: Swift.Decoder) throws { + } +} + +extension RemoveFlowSourceOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} + +extension RemoveFlowSourceOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + } + } +} + +public enum RemoveFlowSourceOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case forbiddenException(ForbiddenException) + case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) +} + +extension RemoveFlowSourceOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: RemoveFlowSourceOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.flowArn = output.flowArn + self.sourceArn = output.sourceArn + } else { + self.flowArn = nil + self.sourceArn = nil + } + } +} + +public struct RemoveFlowSourceOutputResponse: Swift.Equatable { + /// The ARN of the flow that is associated with the source you removed. + public var flowArn: Swift.String? + /// The ARN of the source that was removed. + public var sourceArn: Swift.String? + + public init ( + flowArn: Swift.String? = nil, + sourceArn: Swift.String? = nil + ) + { + self.flowArn = flowArn + self.sourceArn = sourceArn + } +} + +struct RemoveFlowSourceOutputResponseBody: Swift.Equatable { + let flowArn: Swift.String? + let sourceArn: Swift.String? +} + +extension RemoveFlowSourceOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case flowArn = "flowArn" + case sourceArn = "sourceArn" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) + flowArn = flowArnDecoded + let sourceArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sourceArn) + sourceArn = sourceArnDecoded + } +} + +extension RemoveFlowVpcInterfaceInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let flowArn = flowArn else { + return nil + } + guard let vpcInterfaceName = vpcInterfaceName else { + return nil + } + return "/v1/flows/\(flowArn.urlPercentEncoding())/vpcInterfaces/\(vpcInterfaceName.urlPercentEncoding())" + } +} + +public struct RemoveFlowVpcInterfaceInput: Swift.Equatable { + /// The flow that you want to remove a VPC interface from. + /// This member is required. + public var flowArn: Swift.String? + /// The name of the VPC interface that you want to remove. + /// This member is required. + public var vpcInterfaceName: Swift.String? + + public init ( + flowArn: Swift.String? = nil, + vpcInterfaceName: Swift.String? = nil + ) + { + self.flowArn = flowArn + self.vpcInterfaceName = vpcInterfaceName + } +} + +struct RemoveFlowVpcInterfaceInputBody: Swift.Equatable { +} + +extension RemoveFlowVpcInterfaceInputBody: Swift.Decodable { + + public init (from decoder: Swift.Decoder) throws { + } +} + +extension RemoveFlowVpcInterfaceOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} + +extension RemoveFlowVpcInterfaceOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + } + } +} + +public enum RemoveFlowVpcInterfaceOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case forbiddenException(ForbiddenException) + case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) +} + +extension RemoveFlowVpcInterfaceOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: RemoveFlowVpcInterfaceOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.flowArn = output.flowArn + self.nonDeletedNetworkInterfaceIds = output.nonDeletedNetworkInterfaceIds + self.vpcInterfaceName = output.vpcInterfaceName + } else { + self.flowArn = nil + self.nonDeletedNetworkInterfaceIds = nil + self.vpcInterfaceName = nil + } + } +} + +public struct RemoveFlowVpcInterfaceOutputResponse: Swift.Equatable { + /// The ARN of the flow that is associated with the VPC interface you removed. + public var flowArn: Swift.String? + /// IDs of network interfaces associated with the removed VPC interface that Media Connect was unable to remove. + public var nonDeletedNetworkInterfaceIds: [Swift.String]? + /// The name of the VPC interface that was removed. + public var vpcInterfaceName: Swift.String? + + public init ( + flowArn: Swift.String? = nil, + nonDeletedNetworkInterfaceIds: [Swift.String]? = nil, + vpcInterfaceName: Swift.String? = nil + ) + { + self.flowArn = flowArn + self.nonDeletedNetworkInterfaceIds = nonDeletedNetworkInterfaceIds + self.vpcInterfaceName = vpcInterfaceName + } +} + +struct RemoveFlowVpcInterfaceOutputResponseBody: Swift.Equatable { + let flowArn: Swift.String? + let nonDeletedNetworkInterfaceIds: [Swift.String]? + let vpcInterfaceName: Swift.String? +} + +extension RemoveFlowVpcInterfaceOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case flowArn = "flowArn" + case nonDeletedNetworkInterfaceIds = "nonDeletedNetworkInterfaceIds" + case vpcInterfaceName = "vpcInterfaceName" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) + flowArn = flowArnDecoded + let nonDeletedNetworkInterfaceIdsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .nonDeletedNetworkInterfaceIds) + var nonDeletedNetworkInterfaceIdsDecoded0:[Swift.String]? = nil + if let nonDeletedNetworkInterfaceIdsContainer = nonDeletedNetworkInterfaceIdsContainer { + nonDeletedNetworkInterfaceIdsDecoded0 = [Swift.String]() + for string0 in nonDeletedNetworkInterfaceIdsContainer { + if let string0 = string0 { + nonDeletedNetworkInterfaceIdsDecoded0?.append(string0) + } + } + } + nonDeletedNetworkInterfaceIds = nonDeletedNetworkInterfaceIdsDecoded0 + let vpcInterfaceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .vpcInterfaceName) + vpcInterfaceName = vpcInterfaceNameDecoded + } +} + +extension MediaConnectClientTypes.Reservation: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case currencyCode = "currencyCode" + case duration = "duration" + case durationUnits = "durationUnits" + case end = "end" + case offeringArn = "offeringArn" + case offeringDescription = "offeringDescription" + case pricePerUnit = "pricePerUnit" + case priceUnits = "priceUnits" + case reservationArn = "reservationArn" + case reservationName = "reservationName" + case reservationState = "reservationState" + case resourceSpecification = "resourceSpecification" + case start = "start" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let currencyCode = self.currencyCode { + try encodeContainer.encode(currencyCode, forKey: .currencyCode) + } + if let duration = self.duration { + try encodeContainer.encode(duration, forKey: .duration) + } + if let durationUnits = self.durationUnits { + try encodeContainer.encode(durationUnits.rawValue, forKey: .durationUnits) + } + if let end = self.end { + try encodeContainer.encode(end, forKey: .end) + } + if let offeringArn = self.offeringArn { + try encodeContainer.encode(offeringArn, forKey: .offeringArn) + } + if let offeringDescription = self.offeringDescription { + try encodeContainer.encode(offeringDescription, forKey: .offeringDescription) + } + if let pricePerUnit = self.pricePerUnit { + try encodeContainer.encode(pricePerUnit, forKey: .pricePerUnit) + } + if let priceUnits = self.priceUnits { + try encodeContainer.encode(priceUnits.rawValue, forKey: .priceUnits) + } + if let reservationArn = self.reservationArn { + try encodeContainer.encode(reservationArn, forKey: .reservationArn) + } + if let reservationName = self.reservationName { + try encodeContainer.encode(reservationName, forKey: .reservationName) + } + if let reservationState = self.reservationState { + try encodeContainer.encode(reservationState.rawValue, forKey: .reservationState) + } + if let resourceSpecification = self.resourceSpecification { + try encodeContainer.encode(resourceSpecification, forKey: .resourceSpecification) + } + if let start = self.start { + try encodeContainer.encode(start, forKey: .start) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let currencyCodeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .currencyCode) + currencyCode = currencyCodeDecoded + let durationDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .duration) + duration = durationDecoded + let durationUnitsDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.DurationUnits.self, forKey: .durationUnits) + durationUnits = durationUnitsDecoded + let endDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .end) + end = endDecoded + let offeringArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .offeringArn) + offeringArn = offeringArnDecoded + let offeringDescriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .offeringDescription) + offeringDescription = offeringDescriptionDecoded + let pricePerUnitDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .pricePerUnit) + pricePerUnit = pricePerUnitDecoded + let priceUnitsDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.PriceUnits.self, forKey: .priceUnits) + priceUnits = priceUnitsDecoded + let reservationArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .reservationArn) + reservationArn = reservationArnDecoded + let reservationNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .reservationName) + reservationName = reservationNameDecoded + let reservationStateDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ReservationState.self, forKey: .reservationState) + reservationState = reservationStateDecoded + let resourceSpecificationDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ResourceSpecification.self, forKey: .resourceSpecification) + resourceSpecification = resourceSpecificationDecoded + let startDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .start) + start = startDecoded + } +} + +extension MediaConnectClientTypes { + /// A pricing agreement for a discounted rate for a specific outbound bandwidth that your MediaConnect account will use each month over a specific time period. The discounted rate in the reservation applies to outbound bandwidth for all flows from your account until your account reaches the amount of bandwidth in your reservation. If you use more outbound bandwidth than the agreed upon amount in a single month, the overage is charged at the on-demand rate. + public struct Reservation: Swift.Equatable { + /// The type of currency that is used for billing. The currencyCode used for your reservation is US dollars. + /// This member is required. + public var currencyCode: Swift.String? + /// The length of time that this reservation is active. MediaConnect defines this value in the offering. + /// This member is required. + public var duration: Swift.Int? + /// The unit of measurement for the duration of the reservation. MediaConnect defines this value in the offering. + /// This member is required. + public var durationUnits: MediaConnectClientTypes.DurationUnits? + /// The day and time that this reservation expires. This value is calculated based on the start date and time that you set and the offering's duration. + /// This member is required. + public var end: Swift.String? + /// The Amazon Resource Name (ARN) that MediaConnect assigns to the offering. + /// This member is required. + public var offeringArn: Swift.String? + /// A description of the offering. MediaConnect defines this value in the offering. + /// This member is required. + public var offeringDescription: Swift.String? + /// The cost of a single unit. This value, in combination with priceUnits, makes up the rate. MediaConnect defines this value in the offering. + /// This member is required. + public var pricePerUnit: Swift.String? + /// The unit of measurement that is used for billing. This value, in combination with pricePerUnit, makes up the rate. MediaConnect defines this value in the offering. + /// This member is required. + public var priceUnits: MediaConnectClientTypes.PriceUnits? + /// The Amazon Resource Name (ARN) that MediaConnect assigns to the reservation when you purchase an offering. + /// This member is required. + public var reservationArn: Swift.String? + /// The name that you assigned to the reservation when you purchased the offering. + /// This member is required. + public var reservationName: Swift.String? + /// The status of your reservation. + /// This member is required. + public var reservationState: MediaConnectClientTypes.ReservationState? + /// A definition of the amount of outbound bandwidth that you would be reserving if you purchase the offering. MediaConnect defines the values that make up the resourceSpecification in the offering. + /// This member is required. + public var resourceSpecification: MediaConnectClientTypes.ResourceSpecification? + /// The day and time that the reservation becomes active. You set this value when you purchase the offering. + /// This member is required. + public var start: Swift.String? + + public init ( + currencyCode: Swift.String? = nil, + duration: Swift.Int? = nil, + durationUnits: MediaConnectClientTypes.DurationUnits? = nil, + end: Swift.String? = nil, + offeringArn: Swift.String? = nil, + offeringDescription: Swift.String? = nil, + pricePerUnit: Swift.String? = nil, + priceUnits: MediaConnectClientTypes.PriceUnits? = nil, + reservationArn: Swift.String? = nil, + reservationName: Swift.String? = nil, + reservationState: MediaConnectClientTypes.ReservationState? = nil, + resourceSpecification: MediaConnectClientTypes.ResourceSpecification? = nil, + start: Swift.String? = nil + ) + { + self.currencyCode = currencyCode + self.duration = duration + self.durationUnits = durationUnits + self.end = end + self.offeringArn = offeringArn + self.offeringDescription = offeringDescription + self.pricePerUnit = pricePerUnit + self.priceUnits = priceUnits + self.reservationArn = reservationArn + self.reservationName = reservationName + self.reservationState = reservationState + self.resourceSpecification = resourceSpecification + self.start = start + } + } + +} + +extension MediaConnectClientTypes { + public enum ReservationState: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case active + case canceled + case expired + case processing + case sdkUnknown(Swift.String) + + public static var allCases: [ReservationState] { + return [ + .active, + .canceled, + .expired, + .processing, + .sdkUnknown("") + ] + } + 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 .canceled: return "CANCELED" + case .expired: return "EXPIRED" + case .processing: return "PROCESSING" + case let .sdkUnknown(s): return s + } + } + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = ReservationState(rawValue: rawValue) ?? ReservationState.sdkUnknown(rawValue) + } + } +} + +extension MediaConnectClientTypes.ResourceSpecification: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case reservedBitrate = "reservedBitrate" + case resourceType = "resourceType" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let reservedBitrate = self.reservedBitrate { + try encodeContainer.encode(reservedBitrate, forKey: .reservedBitrate) + } + if let resourceType = self.resourceType { + try encodeContainer.encode(resourceType.rawValue, forKey: .resourceType) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let reservedBitrateDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .reservedBitrate) + reservedBitrate = reservedBitrateDecoded + let resourceTypeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ResourceType.self, forKey: .resourceType) + resourceType = resourceTypeDecoded + } +} + +extension MediaConnectClientTypes { + /// A definition of what is being billed for, including the type and amount. + public struct ResourceSpecification: Swift.Equatable { + /// The amount of outbound bandwidth that is discounted in the offering. + public var reservedBitrate: Swift.Int? + /// The type of resource and the unit that is being billed for. + /// This member is required. + public var resourceType: MediaConnectClientTypes.ResourceType? + + public init ( + reservedBitrate: Swift.Int? = nil, + resourceType: MediaConnectClientTypes.ResourceType? = nil + ) + { + self.reservedBitrate = reservedBitrate + self.resourceType = resourceType + } + } + +} + +extension MediaConnectClientTypes { + public enum ResourceType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case mbpsOutboundBandwidth + case sdkUnknown(Swift.String) + + public static var allCases: [ResourceType] { + return [ + .mbpsOutboundBandwidth, + .sdkUnknown("") + ] + } + 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 .mbpsOutboundBandwidth: return "Mbps_Outbound_Bandwidth" + case let .sdkUnknown(s): return s + } + } + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = ResourceType(rawValue: rawValue) ?? ResourceType.sdkUnknown(rawValue) + } + } +} + +extension RevokeFlowEntitlementInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let flowArn = flowArn else { + return nil + } + guard let entitlementArn = entitlementArn else { + return nil + } + return "/v1/flows/\(flowArn.urlPercentEncoding())/entitlements/\(entitlementArn.urlPercentEncoding())" + } +} + +public struct RevokeFlowEntitlementInput: Swift.Equatable { + /// The ARN of the entitlement that you want to revoke. + /// This member is required. + public var entitlementArn: Swift.String? + /// The flow that you want to revoke an entitlement from. + /// This member is required. + public var flowArn: Swift.String? + + public init ( + entitlementArn: Swift.String? = nil, + flowArn: Swift.String? = nil + ) + { + self.entitlementArn = entitlementArn + self.flowArn = flowArn + } +} + +struct RevokeFlowEntitlementInputBody: Swift.Equatable { +} + +extension RevokeFlowEntitlementInputBody: Swift.Decodable { + + public init (from decoder: Swift.Decoder) throws { + } +} + +extension RevokeFlowEntitlementOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} + +extension RevokeFlowEntitlementOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + } + } +} + +public enum RevokeFlowEntitlementOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case forbiddenException(ForbiddenException) + case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) +} + +extension RevokeFlowEntitlementOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: RevokeFlowEntitlementOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.entitlementArn = output.entitlementArn + self.flowArn = output.flowArn + } else { + self.entitlementArn = nil + self.flowArn = nil + } + } +} + +public struct RevokeFlowEntitlementOutputResponse: Swift.Equatable { + /// The ARN of the entitlement that was revoked. + public var entitlementArn: Swift.String? + /// The ARN of the flow that the entitlement was revoked from. + public var flowArn: Swift.String? + + public init ( + entitlementArn: Swift.String? = nil, + flowArn: Swift.String? = nil + ) + { + self.entitlementArn = entitlementArn + self.flowArn = flowArn + } +} + +struct RevokeFlowEntitlementOutputResponseBody: Swift.Equatable { + let entitlementArn: Swift.String? + let flowArn: Swift.String? +} + +extension RevokeFlowEntitlementOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case entitlementArn = "entitlementArn" + case flowArn = "flowArn" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let entitlementArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .entitlementArn) + entitlementArn = entitlementArnDecoded + let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) + flowArn = flowArnDecoded + } +} + +extension MediaConnectClientTypes { + public enum ScanMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case interlace + case progressive + case progressiveSegmentedFrame + case sdkUnknown(Swift.String) + + public static var allCases: [ScanMode] { + return [ + .interlace, + .progressive, + .progressiveSegmentedFrame, + .sdkUnknown("") + ] + } + 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 .interlace: return "interlace" + case .progressive: return "progressive" + case .progressiveSegmentedFrame: return "progressive-segmented-frame" + case let .sdkUnknown(s): return s + } + } + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = ScanMode(rawValue: rawValue) ?? ScanMode.sdkUnknown(rawValue) + } + } +} + +extension ServiceUnavailableException { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: ServiceUnavailableExceptionBody = try responseDecoder.decode(responseBody: data) + self.message = output.message + } else { + self.message = nil + } + self._headers = httpResponse.headers + self._statusCode = httpResponse.statusCode + self._requestID = requestID + self._message = message + } +} + +/// Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception. +public struct ServiceUnavailableException: AWSClientRuntime.AWSHttpServiceError, Swift.Equatable { + public var _headers: ClientRuntime.Headers? + public var _statusCode: ClientRuntime.HttpStatusCode? + public var _message: Swift.String? + public var _requestID: Swift.String? + public var _retryable: Swift.Bool = false + public var _isThrottling: Swift.Bool = false + public var _type: ClientRuntime.ErrorType = .server + /// The error message returned by AWS Elemental MediaConnect. + /// This member is required. + public var message: Swift.String? + + public init ( + message: Swift.String? = nil + ) + { + self.message = message + } +} + +struct ServiceUnavailableExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension ServiceUnavailableExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case message = "message" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) + message = messageDecoded + } +} + +extension MediaConnectClientTypes.SetGatewayBridgeSourceRequest: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case bridgeArn = "bridgeArn" + case vpcInterfaceAttachment = "vpcInterfaceAttachment" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let bridgeArn = self.bridgeArn { + try encodeContainer.encode(bridgeArn, forKey: .bridgeArn) + } + if let vpcInterfaceAttachment = self.vpcInterfaceAttachment { + try encodeContainer.encode(vpcInterfaceAttachment, forKey: .vpcInterfaceAttachment) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let bridgeArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .bridgeArn) + bridgeArn = bridgeArnDecoded + let vpcInterfaceAttachmentDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.VpcInterfaceAttachment.self, forKey: .vpcInterfaceAttachment) + vpcInterfaceAttachment = vpcInterfaceAttachmentDecoded + } +} + +extension MediaConnectClientTypes { + /// The source configuration for cloud flows receiving a stream from a bridge. + public struct SetGatewayBridgeSourceRequest: Swift.Equatable { + /// The ARN of the bridge feeding this flow. + /// This member is required. + public var bridgeArn: Swift.String? + /// The name of the VPC interface attachment to use for this bridge source. + public var vpcInterfaceAttachment: MediaConnectClientTypes.VpcInterfaceAttachment? + + public init ( + bridgeArn: Swift.String? = nil, + vpcInterfaceAttachment: MediaConnectClientTypes.VpcInterfaceAttachment? = nil + ) + { + self.bridgeArn = bridgeArn + self.vpcInterfaceAttachment = vpcInterfaceAttachment + } + } + +} + +extension MediaConnectClientTypes.SetSourceRequest: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case decryption = "decryption" + case description = "description" + case entitlementArn = "entitlementArn" + case gatewayBridgeSource = "gatewayBridgeSource" + case ingestPort = "ingestPort" + case maxBitrate = "maxBitrate" + case maxLatency = "maxLatency" + case maxSyncBuffer = "maxSyncBuffer" + case mediaStreamSourceConfigurations = "mediaStreamSourceConfigurations" + case minLatency = "minLatency" + case name = "name" + case `protocol` = "protocol" + case senderControlPort = "senderControlPort" + case senderIpAddress = "senderIpAddress" + case sourceListenerAddress = "sourceListenerAddress" + case sourceListenerPort = "sourceListenerPort" + case streamId = "streamId" + case vpcInterfaceName = "vpcInterfaceName" + case whitelistCidr = "whitelistCidr" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let decryption = self.decryption { + try encodeContainer.encode(decryption, forKey: .decryption) + } + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let entitlementArn = self.entitlementArn { + try encodeContainer.encode(entitlementArn, forKey: .entitlementArn) + } + if let gatewayBridgeSource = self.gatewayBridgeSource { + try encodeContainer.encode(gatewayBridgeSource, forKey: .gatewayBridgeSource) + } + if let ingestPort = self.ingestPort { + try encodeContainer.encode(ingestPort, forKey: .ingestPort) + } + if let maxBitrate = self.maxBitrate { + try encodeContainer.encode(maxBitrate, forKey: .maxBitrate) + } + if let maxLatency = self.maxLatency { + try encodeContainer.encode(maxLatency, forKey: .maxLatency) + } + if let maxSyncBuffer = self.maxSyncBuffer { + try encodeContainer.encode(maxSyncBuffer, forKey: .maxSyncBuffer) + } + if let mediaStreamSourceConfigurations = mediaStreamSourceConfigurations { + var mediaStreamSourceConfigurationsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .mediaStreamSourceConfigurations) + for mediastreamsourceconfigurationrequest0 in mediaStreamSourceConfigurations { + try mediaStreamSourceConfigurationsContainer.encode(mediastreamsourceconfigurationrequest0) + } + } + if let minLatency = self.minLatency { + try encodeContainer.encode(minLatency, forKey: .minLatency) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let `protocol` = self.`protocol` { + try encodeContainer.encode(`protocol`.rawValue, forKey: .`protocol`) + } + if let senderControlPort = self.senderControlPort { + try encodeContainer.encode(senderControlPort, forKey: .senderControlPort) + } + if let senderIpAddress = self.senderIpAddress { + try encodeContainer.encode(senderIpAddress, forKey: .senderIpAddress) + } + if let sourceListenerAddress = self.sourceListenerAddress { + try encodeContainer.encode(sourceListenerAddress, forKey: .sourceListenerAddress) + } + if let sourceListenerPort = self.sourceListenerPort { + try encodeContainer.encode(sourceListenerPort, forKey: .sourceListenerPort) + } + if let streamId = self.streamId { + try encodeContainer.encode(streamId, forKey: .streamId) + } + if let vpcInterfaceName = self.vpcInterfaceName { + try encodeContainer.encode(vpcInterfaceName, forKey: .vpcInterfaceName) + } + if let whitelistCidr = self.whitelistCidr { + try encodeContainer.encode(whitelistCidr, forKey: .whitelistCidr) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let decryptionDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Encryption.self, forKey: .decryption) + decryption = decryptionDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let entitlementArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .entitlementArn) + entitlementArn = entitlementArnDecoded + let ingestPortDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .ingestPort) + ingestPort = ingestPortDecoded + let maxBitrateDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxBitrate) + maxBitrate = maxBitrateDecoded + let maxLatencyDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxLatency) + maxLatency = maxLatencyDecoded + let maxSyncBufferDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxSyncBuffer) + maxSyncBuffer = maxSyncBufferDecoded + let mediaStreamSourceConfigurationsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.MediaStreamSourceConfigurationRequest?].self, forKey: .mediaStreamSourceConfigurations) + var mediaStreamSourceConfigurationsDecoded0:[MediaConnectClientTypes.MediaStreamSourceConfigurationRequest]? = nil + if let mediaStreamSourceConfigurationsContainer = mediaStreamSourceConfigurationsContainer { + mediaStreamSourceConfigurationsDecoded0 = [MediaConnectClientTypes.MediaStreamSourceConfigurationRequest]() + for structure0 in mediaStreamSourceConfigurationsContainer { + if let structure0 = structure0 { + mediaStreamSourceConfigurationsDecoded0?.append(structure0) + } + } + } + mediaStreamSourceConfigurations = mediaStreamSourceConfigurationsDecoded0 + let minLatencyDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .minLatency) + minLatency = minLatencyDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let protocolDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ModelProtocol.self, forKey: .protocol) + `protocol` = protocolDecoded + let senderControlPortDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .senderControlPort) + senderControlPort = senderControlPortDecoded + let senderIpAddressDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .senderIpAddress) + senderIpAddress = senderIpAddressDecoded + let sourceListenerAddressDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sourceListenerAddress) + sourceListenerAddress = sourceListenerAddressDecoded + let sourceListenerPortDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .sourceListenerPort) + sourceListenerPort = sourceListenerPortDecoded + let streamIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .streamId) + streamId = streamIdDecoded + let vpcInterfaceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .vpcInterfaceName) + vpcInterfaceName = vpcInterfaceNameDecoded + let whitelistCidrDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .whitelistCidr) + whitelistCidr = whitelistCidrDecoded + let gatewayBridgeSourceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.SetGatewayBridgeSourceRequest.self, forKey: .gatewayBridgeSource) + gatewayBridgeSource = gatewayBridgeSourceDecoded + } +} + +extension MediaConnectClientTypes { + /// The settings for the source of the flow. + public struct SetSourceRequest: Swift.Equatable { + /// The type of encryption that is used on the content ingested from this source. Allowable encryption types: static-key. + public var decryption: MediaConnectClientTypes.Encryption? + /// A description for the source. This value is not used or seen outside of the current AWS Elemental MediaConnect account. + public var description: Swift.String? + /// The ARN of the entitlement that allows you to subscribe to this flow. The entitlement is set by the flow originator, and the ARN is generated as part of the originator's flow. + public var entitlementArn: Swift.String? + /// The source configuration for cloud flows receiving a stream from a bridge. + public var gatewayBridgeSource: MediaConnectClientTypes.SetGatewayBridgeSourceRequest? + /// The port that the flow will be listening on for incoming content. + public var ingestPort: Swift.Int? + /// The smoothing max bitrate (in bps) for RIST, RTP, and RTP-FEC streams. + public var maxBitrate: Swift.Int? + /// The maximum latency in milliseconds. This parameter applies only to RIST-based, Zixi-based, and Fujitsu-based streams. + public var maxLatency: Swift.Int? + /// The size of the buffer (in milliseconds) to use to sync incoming source data. + public var maxSyncBuffer: Swift.Int? + /// The media streams that are associated with the source, and the parameters for those associations. + public var mediaStreamSourceConfigurations: [MediaConnectClientTypes.MediaStreamSourceConfigurationRequest]? + /// The minimum latency in milliseconds for SRT-based streams. In streams that use the SRT protocol, this value that you set on your MediaConnect source or output represents the minimal potential latency of that connection. The latency of the stream is set to the highest number between the sender’s minimum latency and the receiver’s minimum latency. + public var minLatency: Swift.Int? + /// The name of the source. + public var name: Swift.String? + /// The protocol that is used by the source. + public var `protocol`: MediaConnectClientTypes.ModelProtocol? + /// The port that the flow uses to send outbound requests to initiate connection with the sender. + public var senderControlPort: Swift.Int? + /// The IP address that the flow communicates with to initiate connection with the sender. + public var senderIpAddress: Swift.String? + /// Source IP or domain name for SRT-caller protocol. + public var sourceListenerAddress: Swift.String? + /// Source port for SRT-caller protocol. + public var sourceListenerPort: Swift.Int? + /// The stream ID that you want to use for this transport. This parameter applies only to Zixi and SRT caller-based streams. + public var streamId: Swift.String? + /// The name of the VPC interface to use for this source. + public var vpcInterfaceName: Swift.String? + /// The range of IP addresses that should be allowed to contribute content to your source. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16. + public var whitelistCidr: Swift.String? + + public init ( + decryption: MediaConnectClientTypes.Encryption? = nil, + description: Swift.String? = nil, + entitlementArn: Swift.String? = nil, + gatewayBridgeSource: MediaConnectClientTypes.SetGatewayBridgeSourceRequest? = nil, + ingestPort: Swift.Int? = nil, + maxBitrate: Swift.Int? = nil, + maxLatency: Swift.Int? = nil, + maxSyncBuffer: Swift.Int? = nil, + mediaStreamSourceConfigurations: [MediaConnectClientTypes.MediaStreamSourceConfigurationRequest]? = nil, + minLatency: Swift.Int? = nil, + name: Swift.String? = nil, + `protocol`: MediaConnectClientTypes.ModelProtocol? = nil, + senderControlPort: Swift.Int? = nil, + senderIpAddress: Swift.String? = nil, + sourceListenerAddress: Swift.String? = nil, + sourceListenerPort: Swift.Int? = nil, + streamId: Swift.String? = nil, + vpcInterfaceName: Swift.String? = nil, + whitelistCidr: Swift.String? = nil + ) + { + self.decryption = decryption + self.description = description + self.entitlementArn = entitlementArn + self.gatewayBridgeSource = gatewayBridgeSource + self.ingestPort = ingestPort + self.maxBitrate = maxBitrate + self.maxLatency = maxLatency + self.maxSyncBuffer = maxSyncBuffer + self.mediaStreamSourceConfigurations = mediaStreamSourceConfigurations + self.minLatency = minLatency + self.name = name + self.`protocol` = `protocol` + self.senderControlPort = senderControlPort + self.senderIpAddress = senderIpAddress + self.sourceListenerAddress = sourceListenerAddress + self.sourceListenerPort = sourceListenerPort + self.streamId = streamId + self.vpcInterfaceName = vpcInterfaceName + self.whitelistCidr = whitelistCidr + } } -} -struct RemoveFlowVpcInterfaceOutputResponseBody: Swift.Equatable { - let flowArn: Swift.String? - let nonDeletedNetworkInterfaceIds: [Swift.String]? - let vpcInterfaceName: Swift.String? } -extension RemoveFlowVpcInterfaceOutputResponseBody: Swift.Decodable { +extension MediaConnectClientTypes.Source: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case flowArn = "flowArn" - case nonDeletedNetworkInterfaceIds = "nonDeletedNetworkInterfaceIds" + case dataTransferSubscriberFeePercent = "dataTransferSubscriberFeePercent" + case decryption = "decryption" + case description = "description" + case entitlementArn = "entitlementArn" + case gatewayBridgeSource = "gatewayBridgeSource" + case ingestIp = "ingestIp" + case ingestPort = "ingestPort" + case mediaStreamSourceConfigurations = "mediaStreamSourceConfigurations" + case name = "name" + case senderControlPort = "senderControlPort" + case senderIpAddress = "senderIpAddress" + case sourceArn = "sourceArn" + case transport = "transport" case vpcInterfaceName = "vpcInterfaceName" - } - - public init (from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) - flowArn = flowArnDecoded - let nonDeletedNetworkInterfaceIdsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .nonDeletedNetworkInterfaceIds) - var nonDeletedNetworkInterfaceIdsDecoded0:[Swift.String]? = nil - if let nonDeletedNetworkInterfaceIdsContainer = nonDeletedNetworkInterfaceIdsContainer { - nonDeletedNetworkInterfaceIdsDecoded0 = [Swift.String]() - for string0 in nonDeletedNetworkInterfaceIdsContainer { - if let string0 = string0 { - nonDeletedNetworkInterfaceIdsDecoded0?.append(string0) - } - } - } - nonDeletedNetworkInterfaceIds = nonDeletedNetworkInterfaceIdsDecoded0 - let vpcInterfaceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .vpcInterfaceName) - vpcInterfaceName = vpcInterfaceNameDecoded - } -} - -extension MediaConnectClientTypes.Reservation: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case currencyCode = "currencyCode" - case duration = "duration" - case durationUnits = "durationUnits" - case end = "end" - case offeringArn = "offeringArn" - case offeringDescription = "offeringDescription" - case pricePerUnit = "pricePerUnit" - case priceUnits = "priceUnits" - case reservationArn = "reservationArn" - case reservationName = "reservationName" - case reservationState = "reservationState" - case resourceSpecification = "resourceSpecification" - case start = "start" + case whitelistCidr = "whitelistCidr" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let currencyCode = self.currencyCode { - try encodeContainer.encode(currencyCode, forKey: .currencyCode) + if let dataTransferSubscriberFeePercent = self.dataTransferSubscriberFeePercent { + try encodeContainer.encode(dataTransferSubscriberFeePercent, forKey: .dataTransferSubscriberFeePercent) } - if let duration = self.duration { - try encodeContainer.encode(duration, forKey: .duration) + if let decryption = self.decryption { + try encodeContainer.encode(decryption, forKey: .decryption) } - if let durationUnits = self.durationUnits { - try encodeContainer.encode(durationUnits.rawValue, forKey: .durationUnits) + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) } - if let end = self.end { - try encodeContainer.encode(end, forKey: .end) + if let entitlementArn = self.entitlementArn { + try encodeContainer.encode(entitlementArn, forKey: .entitlementArn) } - if let offeringArn = self.offeringArn { - try encodeContainer.encode(offeringArn, forKey: .offeringArn) + if let gatewayBridgeSource = self.gatewayBridgeSource { + try encodeContainer.encode(gatewayBridgeSource, forKey: .gatewayBridgeSource) } - if let offeringDescription = self.offeringDescription { - try encodeContainer.encode(offeringDescription, forKey: .offeringDescription) + if let ingestIp = self.ingestIp { + try encodeContainer.encode(ingestIp, forKey: .ingestIp) } - if let pricePerUnit = self.pricePerUnit { - try encodeContainer.encode(pricePerUnit, forKey: .pricePerUnit) + if let ingestPort = self.ingestPort { + try encodeContainer.encode(ingestPort, forKey: .ingestPort) } - if let priceUnits = self.priceUnits { - try encodeContainer.encode(priceUnits.rawValue, forKey: .priceUnits) + if let mediaStreamSourceConfigurations = mediaStreamSourceConfigurations { + var mediaStreamSourceConfigurationsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .mediaStreamSourceConfigurations) + for mediastreamsourceconfiguration0 in mediaStreamSourceConfigurations { + try mediaStreamSourceConfigurationsContainer.encode(mediastreamsourceconfiguration0) + } } - if let reservationArn = self.reservationArn { - try encodeContainer.encode(reservationArn, forKey: .reservationArn) + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) } - if let reservationName = self.reservationName { - try encodeContainer.encode(reservationName, forKey: .reservationName) + if let senderControlPort = self.senderControlPort { + try encodeContainer.encode(senderControlPort, forKey: .senderControlPort) } - if let reservationState = self.reservationState { - try encodeContainer.encode(reservationState.rawValue, forKey: .reservationState) + if let senderIpAddress = self.senderIpAddress { + try encodeContainer.encode(senderIpAddress, forKey: .senderIpAddress) } - if let resourceSpecification = self.resourceSpecification { - try encodeContainer.encode(resourceSpecification, forKey: .resourceSpecification) + if let sourceArn = self.sourceArn { + try encodeContainer.encode(sourceArn, forKey: .sourceArn) } - if let start = self.start { - try encodeContainer.encode(start, forKey: .start) + if let transport = self.transport { + try encodeContainer.encode(transport, forKey: .transport) + } + if let vpcInterfaceName = self.vpcInterfaceName { + try encodeContainer.encode(vpcInterfaceName, forKey: .vpcInterfaceName) + } + if let whitelistCidr = self.whitelistCidr { + try encodeContainer.encode(whitelistCidr, forKey: .whitelistCidr) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let dataTransferSubscriberFeePercentDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .dataTransferSubscriberFeePercent) + dataTransferSubscriberFeePercent = dataTransferSubscriberFeePercentDecoded + let decryptionDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Encryption.self, forKey: .decryption) + decryption = decryptionDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let entitlementArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .entitlementArn) + entitlementArn = entitlementArnDecoded + let ingestIpDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .ingestIp) + ingestIp = ingestIpDecoded + let ingestPortDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .ingestPort) + ingestPort = ingestPortDecoded + let mediaStreamSourceConfigurationsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.MediaStreamSourceConfiguration?].self, forKey: .mediaStreamSourceConfigurations) + var mediaStreamSourceConfigurationsDecoded0:[MediaConnectClientTypes.MediaStreamSourceConfiguration]? = nil + if let mediaStreamSourceConfigurationsContainer = mediaStreamSourceConfigurationsContainer { + mediaStreamSourceConfigurationsDecoded0 = [MediaConnectClientTypes.MediaStreamSourceConfiguration]() + for structure0 in mediaStreamSourceConfigurationsContainer { + if let structure0 = structure0 { + mediaStreamSourceConfigurationsDecoded0?.append(structure0) + } + } + } + mediaStreamSourceConfigurations = mediaStreamSourceConfigurationsDecoded0 + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let senderControlPortDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .senderControlPort) + senderControlPort = senderControlPortDecoded + let senderIpAddressDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .senderIpAddress) + senderIpAddress = senderIpAddressDecoded + let sourceArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sourceArn) + sourceArn = sourceArnDecoded + let transportDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Transport.self, forKey: .transport) + transport = transportDecoded + let vpcInterfaceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .vpcInterfaceName) + vpcInterfaceName = vpcInterfaceNameDecoded + let whitelistCidrDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .whitelistCidr) + whitelistCidr = whitelistCidrDecoded + let gatewayBridgeSourceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.GatewayBridgeSource.self, forKey: .gatewayBridgeSource) + gatewayBridgeSource = gatewayBridgeSourceDecoded + } +} + +extension MediaConnectClientTypes { + /// The settings for the source of the flow. + public struct Source: Swift.Equatable { + /// Percentage from 0-100 of the data transfer cost to be billed to the subscriber. + public var dataTransferSubscriberFeePercent: Swift.Int? + /// The type of encryption that is used on the content ingested from this source. + public var decryption: MediaConnectClientTypes.Encryption? + /// A description for the source. This value is not used or seen outside of the current AWS Elemental MediaConnect account. + public var description: Swift.String? + /// The ARN of the entitlement that allows you to subscribe to content that comes from another AWS account. The entitlement is set by the content originator and the ARN is generated as part of the originator's flow. + public var entitlementArn: Swift.String? + /// The source configuration for cloud flows receiving a stream from a bridge. + public var gatewayBridgeSource: MediaConnectClientTypes.GatewayBridgeSource? + /// The IP address that the flow will be listening on for incoming content. + public var ingestIp: Swift.String? + /// The port that the flow will be listening on for incoming content. + public var ingestPort: Swift.Int? + /// The media streams that are associated with the source, and the parameters for those associations. + public var mediaStreamSourceConfigurations: [MediaConnectClientTypes.MediaStreamSourceConfiguration]? + /// The name of the source. + /// This member is required. + public var name: Swift.String? + /// The port that the flow uses to send outbound requests to initiate connection with the sender. + public var senderControlPort: Swift.Int? + /// The IP address that the flow communicates with to initiate connection with the sender. + public var senderIpAddress: Swift.String? + /// The ARN of the source. + /// This member is required. + public var sourceArn: Swift.String? + /// Attributes related to the transport stream that are used in the source. + public var transport: MediaConnectClientTypes.Transport? + /// The name of the VPC interface that is used for this source. + public var vpcInterfaceName: Swift.String? + /// The range of IP addresses that should be allowed to contribute content to your source. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16. + public var whitelistCidr: Swift.String? + + public init ( + dataTransferSubscriberFeePercent: Swift.Int? = nil, + decryption: MediaConnectClientTypes.Encryption? = nil, + description: Swift.String? = nil, + entitlementArn: Swift.String? = nil, + gatewayBridgeSource: MediaConnectClientTypes.GatewayBridgeSource? = nil, + ingestIp: Swift.String? = nil, + ingestPort: Swift.Int? = nil, + mediaStreamSourceConfigurations: [MediaConnectClientTypes.MediaStreamSourceConfiguration]? = nil, + name: Swift.String? = nil, + senderControlPort: Swift.Int? = nil, + senderIpAddress: Swift.String? = nil, + sourceArn: Swift.String? = nil, + transport: MediaConnectClientTypes.Transport? = nil, + vpcInterfaceName: Swift.String? = nil, + whitelistCidr: Swift.String? = nil + ) + { + self.dataTransferSubscriberFeePercent = dataTransferSubscriberFeePercent + self.decryption = decryption + self.description = description + self.entitlementArn = entitlementArn + self.gatewayBridgeSource = gatewayBridgeSource + self.ingestIp = ingestIp + self.ingestPort = ingestPort + self.mediaStreamSourceConfigurations = mediaStreamSourceConfigurations + self.name = name + self.senderControlPort = senderControlPort + self.senderIpAddress = senderIpAddress + self.sourceArn = sourceArn + self.transport = transport + self.vpcInterfaceName = vpcInterfaceName + self.whitelistCidr = whitelistCidr + } + } + +} + +extension MediaConnectClientTypes.SourcePriority: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case primarySource = "primarySource" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let primarySource = self.primarySource { + try encodeContainer.encode(primarySource, forKey: .primarySource) } } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let currencyCodeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .currencyCode) - currencyCode = currencyCodeDecoded - let durationDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .duration) - duration = durationDecoded - let durationUnitsDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.DurationUnits.self, forKey: .durationUnits) - durationUnits = durationUnitsDecoded - let endDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .end) - end = endDecoded - let offeringArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .offeringArn) - offeringArn = offeringArnDecoded - let offeringDescriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .offeringDescription) - offeringDescription = offeringDescriptionDecoded - let pricePerUnitDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .pricePerUnit) - pricePerUnit = pricePerUnitDecoded - let priceUnitsDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.PriceUnits.self, forKey: .priceUnits) - priceUnits = priceUnitsDecoded - let reservationArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .reservationArn) - reservationArn = reservationArnDecoded - let reservationNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .reservationName) - reservationName = reservationNameDecoded - let reservationStateDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ReservationState.self, forKey: .reservationState) - reservationState = reservationStateDecoded - let resourceSpecificationDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ResourceSpecification.self, forKey: .resourceSpecification) - resourceSpecification = resourceSpecificationDecoded - let startDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .start) - start = startDecoded + let primarySourceDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .primarySource) + primarySource = primarySourceDecoded } } extension MediaConnectClientTypes { - /// A pricing agreement for a discounted rate for a specific outbound bandwidth that your MediaConnect account will use each month over a specific time period. The discounted rate in the reservation applies to outbound bandwidth for all flows from your account until your account reaches the amount of bandwidth in your reservation. If you use more outbound bandwidth than the agreed upon amount in a single month, the overage is charged at the on-demand rate. - public struct Reservation: Swift.Equatable { - /// The type of currency that is used for billing. The currencyCode used for your reservation is US dollars. - /// This member is required. - public var currencyCode: Swift.String? - /// The length of time that this reservation is active. MediaConnect defines this value in the offering. - /// This member is required. - public var duration: Swift.Int? - /// The unit of measurement for the duration of the reservation. MediaConnect defines this value in the offering. - /// This member is required. - public var durationUnits: MediaConnectClientTypes.DurationUnits? - /// The day and time that this reservation expires. This value is calculated based on the start date and time that you set and the offering's duration. - /// This member is required. - public var end: Swift.String? - /// The Amazon Resource Name (ARN) that MediaConnect assigns to the offering. - /// This member is required. - public var offeringArn: Swift.String? - /// A description of the offering. MediaConnect defines this value in the offering. - /// This member is required. - public var offeringDescription: Swift.String? - /// The cost of a single unit. This value, in combination with priceUnits, makes up the rate. MediaConnect defines this value in the offering. - /// This member is required. - public var pricePerUnit: Swift.String? - /// The unit of measurement that is used for billing. This value, in combination with pricePerUnit, makes up the rate. MediaConnect defines this value in the offering. - /// This member is required. - public var priceUnits: MediaConnectClientTypes.PriceUnits? - /// The Amazon Resource Name (ARN) that MediaConnect assigns to the reservation when you purchase an offering. - /// This member is required. - public var reservationArn: Swift.String? - /// The name that you assigned to the reservation when you purchased the offering. - /// This member is required. - public var reservationName: Swift.String? - /// The status of your reservation. - /// This member is required. - public var reservationState: MediaConnectClientTypes.ReservationState? - /// A definition of the amount of outbound bandwidth that you would be reserving if you purchase the offering. MediaConnect defines the values that make up the resourceSpecification in the offering. - /// This member is required. - public var resourceSpecification: MediaConnectClientTypes.ResourceSpecification? - /// The day and time that the reservation becomes active. You set this value when you purchase the offering. - /// This member is required. - public var start: Swift.String? + /// The priority you want to assign to a source. You can have a primary stream and a backup stream or two equally prioritized streams. + public struct SourcePriority: Swift.Equatable { + /// The name of the source you choose as the primary source for this flow. + public var primarySource: Swift.String? public init ( - currencyCode: Swift.String? = nil, - duration: Swift.Int? = nil, - durationUnits: MediaConnectClientTypes.DurationUnits? = nil, - end: Swift.String? = nil, - offeringArn: Swift.String? = nil, - offeringDescription: Swift.String? = nil, - pricePerUnit: Swift.String? = nil, - priceUnits: MediaConnectClientTypes.PriceUnits? = nil, - reservationArn: Swift.String? = nil, - reservationName: Swift.String? = nil, - reservationState: MediaConnectClientTypes.ReservationState? = nil, - resourceSpecification: MediaConnectClientTypes.ResourceSpecification? = nil, - start: Swift.String? = nil + primarySource: Swift.String? = nil ) { - self.currencyCode = currencyCode - self.duration = duration - self.durationUnits = durationUnits - self.end = end - self.offeringArn = offeringArn - self.offeringDescription = offeringDescription - self.pricePerUnit = pricePerUnit - self.priceUnits = priceUnits - self.reservationArn = reservationArn - self.reservationName = reservationName - self.reservationState = reservationState - self.resourceSpecification = resourceSpecification - self.start = start + self.primarySource = primarySource } } } extension MediaConnectClientTypes { - public enum ReservationState: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case active - case canceled - case expired - case processing + public enum SourceType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case entitled + case owned case sdkUnknown(Swift.String) - public static var allCases: [ReservationState] { + public static var allCases: [SourceType] { return [ - .active, - .canceled, - .expired, - .processing, + .entitled, + .owned, .sdkUnknown("") ] } @@ -6534,75 +11493,185 @@ extension MediaConnectClientTypes { } public var rawValue: Swift.String { switch self { - case .active: return "ACTIVE" - case .canceled: return "CANCELED" - case .expired: return "EXPIRED" - case .processing: return "PROCESSING" + case .entitled: return "ENTITLED" + case .owned: return "OWNED" case let .sdkUnknown(s): return s } } public init(from decoder: Swift.Decoder) throws { let container = try decoder.singleValueContainer() let rawValue = try container.decode(RawValue.self) - self = ReservationState(rawValue: rawValue) ?? ReservationState.sdkUnknown(rawValue) + self = SourceType(rawValue: rawValue) ?? SourceType.sdkUnknown(rawValue) } } } -extension MediaConnectClientTypes.ResourceSpecification: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case reservedBitrate = "reservedBitrate" - case resourceType = "resourceType" +extension StartFlowInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let flowArn = flowArn else { + return nil + } + return "/v1/flows/start/\(flowArn.urlPercentEncoding())" } +} - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let reservedBitrate = self.reservedBitrate { - try encodeContainer.encode(reservedBitrate, forKey: .reservedBitrate) +public struct StartFlowInput: Swift.Equatable { + /// The ARN of the flow that you want to start. + /// This member is required. + public var flowArn: Swift.String? + + public init ( + flowArn: Swift.String? = nil + ) + { + self.flowArn = flowArn + } +} + +struct StartFlowInputBody: Swift.Equatable { +} + +extension StartFlowInputBody: Swift.Decodable { + + public init (from decoder: Swift.Decoder) throws { + } +} + +extension StartFlowOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} + +extension StartFlowOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) } - if let resourceType = self.resourceType { - try encodeContainer.encode(resourceType.rawValue, forKey: .resourceType) + } +} + +public enum StartFlowOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case forbiddenException(ForbiddenException) + case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) +} + +extension StartFlowOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: StartFlowOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.flowArn = output.flowArn + self.status = output.status + } else { + self.flowArn = nil + self.status = nil } } +} - public init (from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let reservedBitrateDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .reservedBitrate) - reservedBitrate = reservedBitrateDecoded - let resourceTypeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ResourceType.self, forKey: .resourceType) - resourceType = resourceTypeDecoded +public struct StartFlowOutputResponse: Swift.Equatable { + /// The ARN of the flow that you started. + public var flowArn: Swift.String? + /// The status of the flow when the StartFlow process begins. + public var status: MediaConnectClientTypes.Status? + + public init ( + flowArn: Swift.String? = nil, + status: MediaConnectClientTypes.Status? = nil + ) + { + self.flowArn = flowArn + self.status = status } } -extension MediaConnectClientTypes { - /// A definition of what is being billed for, including the type and amount. - public struct ResourceSpecification: Swift.Equatable { - /// The amount of outbound bandwidth that is discounted in the offering. - public var reservedBitrate: Swift.Int? - /// The type of resource and the unit that is being billed for. - /// This member is required. - public var resourceType: MediaConnectClientTypes.ResourceType? +struct StartFlowOutputResponseBody: Swift.Equatable { + let flowArn: Swift.String? + let status: MediaConnectClientTypes.Status? +} + +extension StartFlowOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case flowArn = "flowArn" + case status = "status" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) + flowArn = flowArnDecoded + let statusDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Status.self, forKey: .status) + status = statusDecoded + } +} - public init ( - reservedBitrate: Swift.Int? = nil, - resourceType: MediaConnectClientTypes.ResourceType? = nil - ) - { - self.reservedBitrate = reservedBitrate - self.resourceType = resourceType +extension MediaConnectClientTypes { + public enum State: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case disabled + case enabled + case sdkUnknown(Swift.String) + + public static var allCases: [State] { + return [ + .disabled, + .enabled, + .sdkUnknown("") + ] + } + 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 + } + } + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = State(rawValue: rawValue) ?? State.sdkUnknown(rawValue) } } - } extension MediaConnectClientTypes { - public enum ResourceType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case mbpsOutboundBandwidth + public enum Status: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case active + case deleting + case error + case standby + case starting + case stopping + case updating case sdkUnknown(Swift.String) - public static var allCases: [ResourceType] { + public static var allCases: [Status] { return [ - .mbpsOutboundBandwidth, + .active, + .deleting, + .error, + .standby, + .starting, + .stopping, + .updating, .sdkUnknown("") ] } @@ -6612,58 +11681,56 @@ extension MediaConnectClientTypes { } public var rawValue: Swift.String { switch self { - case .mbpsOutboundBandwidth: return "Mbps_Outbound_Bandwidth" + case .active: return "ACTIVE" + case .deleting: return "DELETING" + case .error: return "ERROR" + case .standby: return "STANDBY" + case .starting: return "STARTING" + case .stopping: return "STOPPING" + case .updating: return "UPDATING" case let .sdkUnknown(s): return s } } public init(from decoder: Swift.Decoder) throws { let container = try decoder.singleValueContainer() let rawValue = try container.decode(RawValue.self) - self = ResourceType(rawValue: rawValue) ?? ResourceType.sdkUnknown(rawValue) + self = Status(rawValue: rawValue) ?? Status.sdkUnknown(rawValue) } } } -extension RevokeFlowEntitlementInput: ClientRuntime.URLPathProvider { +extension StopFlowInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let flowArn = flowArn else { return nil } - guard let entitlementArn = entitlementArn else { - return nil - } - return "/v1/flows/\(flowArn.urlPercentEncoding())/entitlements/\(entitlementArn.urlPercentEncoding())" + return "/v1/flows/stop/\(flowArn.urlPercentEncoding())" } } -public struct RevokeFlowEntitlementInput: Swift.Equatable { - /// The ARN of the entitlement that you want to revoke. - /// This member is required. - public var entitlementArn: Swift.String? - /// The flow that you want to revoke an entitlement from. +public struct StopFlowInput: Swift.Equatable { + /// The ARN of the flow that you want to stop. /// This member is required. public var flowArn: Swift.String? public init ( - entitlementArn: Swift.String? = nil, flowArn: Swift.String? = nil ) { - self.entitlementArn = entitlementArn self.flowArn = flowArn } } -struct RevokeFlowEntitlementInputBody: Swift.Equatable { +struct StopFlowInputBody: Swift.Equatable { } -extension RevokeFlowEntitlementInputBody: Swift.Decodable { +extension StopFlowInputBody: Swift.Decodable { public init (from decoder: Swift.Decoder) throws { } } -extension RevokeFlowEntitlementOutputError: ClientRuntime.HttpResponseBinding { +extension StopFlowOutputError: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) @@ -6671,7 +11738,7 @@ extension RevokeFlowEntitlementOutputError: ClientRuntime.HttpResponseBinding { } } -extension RevokeFlowEntitlementOutputError { +extension StopFlowOutputError { public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { switch errorType { case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) @@ -6685,7 +11752,7 @@ extension RevokeFlowEntitlementOutputError { } } -public enum RevokeFlowEntitlementOutputError: Swift.Error, Swift.Equatable { +public enum StopFlowOutputError: Swift.Error, Swift.Equatable { case badRequestException(BadRequestException) case forbiddenException(ForbiddenException) case internalServerErrorException(InternalServerErrorException) @@ -6695,69 +11762,186 @@ public enum RevokeFlowEntitlementOutputError: Swift.Error, Swift.Equatable { case unknown(UnknownAWSHttpServiceError) } -extension RevokeFlowEntitlementOutputResponse: ClientRuntime.HttpResponseBinding { +extension StopFlowOutputResponse: ClientRuntime.HttpResponseBinding { public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { if case .stream(let reader) = httpResponse.body, let responseDecoder = decoder { let data = reader.toBytes().getData() - let output: RevokeFlowEntitlementOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.entitlementArn = output.entitlementArn + let output: StopFlowOutputResponseBody = try responseDecoder.decode(responseBody: data) self.flowArn = output.flowArn + self.status = output.status } else { - self.entitlementArn = nil self.flowArn = nil + self.status = nil } } } -public struct RevokeFlowEntitlementOutputResponse: Swift.Equatable { - /// The ARN of the entitlement that was revoked. - public var entitlementArn: Swift.String? - /// The ARN of the flow that the entitlement was revoked from. +public struct StopFlowOutputResponse: Swift.Equatable { + /// The ARN of the flow that you stopped. public var flowArn: Swift.String? + /// The status of the flow when the StopFlow process begins. + public var status: MediaConnectClientTypes.Status? public init ( - entitlementArn: Swift.String? = nil, - flowArn: Swift.String? = nil + flowArn: Swift.String? = nil, + status: MediaConnectClientTypes.Status? = nil ) { - self.entitlementArn = entitlementArn self.flowArn = flowArn + self.status = status } } -struct RevokeFlowEntitlementOutputResponseBody: Swift.Equatable { - let entitlementArn: Swift.String? +struct StopFlowOutputResponseBody: Swift.Equatable { let flowArn: Swift.String? + let status: MediaConnectClientTypes.Status? } -extension RevokeFlowEntitlementOutputResponseBody: Swift.Decodable { +extension StopFlowOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case entitlementArn = "entitlementArn" case flowArn = "flowArn" + case status = "status" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let entitlementArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .entitlementArn) - entitlementArn = entitlementArnDecoded let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) flowArn = flowArnDecoded + let statusDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Status.self, forKey: .status) + status = statusDecoded + } +} + +extension TagResourceInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case tags = "tags" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let tags = tags { + var tagsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .tags) + for (dictKey0, __mapOf__string0) in tags { + try tagsContainer.encode(__mapOf__string0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + } + } + } +} + +extension TagResourceInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let resourceArn = resourceArn else { + return nil + } + return "/tags/\(resourceArn.urlPercentEncoding())" + } +} + +/// The tags to add to the resource. A tag is an array of key-value pairs. Tag keys can have a maximum character length of 128 characters, and tag values can have a maximum length of 256 characters. +public struct TagResourceInput: Swift.Equatable { + /// The Amazon Resource Name (ARN) that identifies the AWS Elemental MediaConnect resource to which to add tags. + /// This member is required. + public var resourceArn: Swift.String? + /// A map from tag keys to values. Tag keys can have a maximum character length of 128 characters, and tag values can have a maximum length of 256 characters. + /// 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 + } +} + +struct TagResourceInputBody: Swift.Equatable { + let tags: [Swift.String:Swift.String]? +} + +extension TagResourceInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case tags = "tags" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let tagsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .tags) + var tagsDecoded0: [Swift.String:Swift.String]? = nil + if let tagsContainer = tagsContainer { + tagsDecoded0 = [Swift.String:Swift.String]() + for (key0, __string0) in tagsContainer { + if let __string0 = __string0 { + tagsDecoded0?[key0] = __string0 + } + } + } + tags = tagsDecoded0 + } +} + +extension TagResourceOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} + +extension TagResourceOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + } + } +} + +public enum TagResourceOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) + case unknown(UnknownAWSHttpServiceError) +} + +extension TagResourceOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { } } +public struct TagResourceOutputResponse: Swift.Equatable { + + public init () { } +} + extension MediaConnectClientTypes { - public enum ScanMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case interlace - case progressive - case progressiveSegmentedFrame + public enum Tcs: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case bt2100linhlg + case bt2100linpq + case density + case hlg + case linear + case pq + case sdr + case st20651 + case st4281 case sdkUnknown(Swift.String) - public static var allCases: [ScanMode] { + public static var allCases: [Tcs] { return [ - .interlace, - .progressive, - .progressiveSegmentedFrame, + .bt2100linhlg, + .bt2100linpq, + .density, + .hlg, + .linear, + .pq, + .sdr, + .st20651, + .st4281, .sdkUnknown("") ] } @@ -6767,26 +11951,32 @@ extension MediaConnectClientTypes { } public var rawValue: Swift.String { switch self { - case .interlace: return "interlace" - case .progressive: return "progressive" - case .progressiveSegmentedFrame: return "progressive-segmented-frame" + case .bt2100linhlg: return "BT2100LINHLG" + case .bt2100linpq: return "BT2100LINPQ" + case .density: return "DENSITY" + case .hlg: return "HLG" + case .linear: return "LINEAR" + case .pq: return "PQ" + case .sdr: return "SDR" + case .st20651: return "ST2065-1" + case .st4281: return "ST428-1" case let .sdkUnknown(s): return s } } public init(from decoder: Swift.Decoder) throws { let container = try decoder.singleValueContainer() let rawValue = try container.decode(RawValue.self) - self = ScanMode(rawValue: rawValue) ?? ScanMode.sdkUnknown(rawValue) + self = Tcs(rawValue: rawValue) ?? Tcs.sdkUnknown(rawValue) } } } -extension ServiceUnavailableException { +extension TooManyRequestsException { public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { if case .stream(let reader) = httpResponse.body, let responseDecoder = decoder { let data = reader.toBytes().getData() - let output: ServiceUnavailableExceptionBody = try responseDecoder.decode(responseBody: data) + let output: TooManyRequestsExceptionBody = try responseDecoder.decode(responseBody: data) self.message = output.message } else { self.message = nil @@ -6799,14 +11989,14 @@ extension ServiceUnavailableException { } /// Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception. -public struct ServiceUnavailableException: AWSClientRuntime.AWSHttpServiceError, Swift.Equatable { +public struct TooManyRequestsException: AWSClientRuntime.AWSHttpServiceError, Swift.Equatable { public var _headers: ClientRuntime.Headers? public var _statusCode: ClientRuntime.HttpStatusCode? public var _message: Swift.String? public var _requestID: Swift.String? public var _retryable: Swift.Bool = false public var _isThrottling: Swift.Bool = false - public var _type: ClientRuntime.ErrorType = .server + public var _type: ClientRuntime.ErrorType = .client /// The error message returned by AWS Elemental MediaConnect. /// This member is required. public var message: Swift.String? @@ -6817,287 +12007,66 @@ public struct ServiceUnavailableException: AWSClientRuntime.AWSHttpServiceError, { self.message = message } -} - -struct ServiceUnavailableExceptionBody: Swift.Equatable { - let message: Swift.String? -} - -extension ServiceUnavailableExceptionBody: Swift.Decodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case message = "message" - } - - public init (from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) - message = messageDecoded - } -} - -extension MediaConnectClientTypes.SetSourceRequest: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case decryption = "decryption" - case description = "description" - case entitlementArn = "entitlementArn" - case ingestPort = "ingestPort" - case maxBitrate = "maxBitrate" - case maxLatency = "maxLatency" - case maxSyncBuffer = "maxSyncBuffer" - case mediaStreamSourceConfigurations = "mediaStreamSourceConfigurations" - case minLatency = "minLatency" - case name = "name" - case `protocol` = "protocol" - case senderControlPort = "senderControlPort" - case senderIpAddress = "senderIpAddress" - case sourceListenerAddress = "sourceListenerAddress" - case sourceListenerPort = "sourceListenerPort" - case streamId = "streamId" - case vpcInterfaceName = "vpcInterfaceName" - case whitelistCidr = "whitelistCidr" - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let decryption = self.decryption { - try encodeContainer.encode(decryption, forKey: .decryption) - } - if let description = self.description { - try encodeContainer.encode(description, forKey: .description) - } - if let entitlementArn = self.entitlementArn { - try encodeContainer.encode(entitlementArn, forKey: .entitlementArn) - } - if let ingestPort = self.ingestPort { - try encodeContainer.encode(ingestPort, forKey: .ingestPort) - } - if let maxBitrate = self.maxBitrate { - try encodeContainer.encode(maxBitrate, forKey: .maxBitrate) - } - if let maxLatency = self.maxLatency { - try encodeContainer.encode(maxLatency, forKey: .maxLatency) - } - if let maxSyncBuffer = self.maxSyncBuffer { - try encodeContainer.encode(maxSyncBuffer, forKey: .maxSyncBuffer) - } - if let mediaStreamSourceConfigurations = mediaStreamSourceConfigurations { - var mediaStreamSourceConfigurationsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .mediaStreamSourceConfigurations) - for mediastreamsourceconfigurationrequest0 in mediaStreamSourceConfigurations { - try mediaStreamSourceConfigurationsContainer.encode(mediastreamsourceconfigurationrequest0) - } - } - if let minLatency = self.minLatency { - try encodeContainer.encode(minLatency, forKey: .minLatency) - } - if let name = self.name { - try encodeContainer.encode(name, forKey: .name) - } - if let `protocol` = self.`protocol` { - try encodeContainer.encode(`protocol`.rawValue, forKey: .`protocol`) - } - if let senderControlPort = self.senderControlPort { - try encodeContainer.encode(senderControlPort, forKey: .senderControlPort) - } - if let senderIpAddress = self.senderIpAddress { - try encodeContainer.encode(senderIpAddress, forKey: .senderIpAddress) - } - if let sourceListenerAddress = self.sourceListenerAddress { - try encodeContainer.encode(sourceListenerAddress, forKey: .sourceListenerAddress) - } - if let sourceListenerPort = self.sourceListenerPort { - try encodeContainer.encode(sourceListenerPort, forKey: .sourceListenerPort) - } - if let streamId = self.streamId { - try encodeContainer.encode(streamId, forKey: .streamId) - } - if let vpcInterfaceName = self.vpcInterfaceName { - try encodeContainer.encode(vpcInterfaceName, forKey: .vpcInterfaceName) - } - if let whitelistCidr = self.whitelistCidr { - try encodeContainer.encode(whitelistCidr, forKey: .whitelistCidr) - } - } - - public init (from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let decryptionDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Encryption.self, forKey: .decryption) - decryption = decryptionDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let entitlementArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .entitlementArn) - entitlementArn = entitlementArnDecoded - let ingestPortDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .ingestPort) - ingestPort = ingestPortDecoded - let maxBitrateDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxBitrate) - maxBitrate = maxBitrateDecoded - let maxLatencyDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxLatency) - maxLatency = maxLatencyDecoded - let maxSyncBufferDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxSyncBuffer) - maxSyncBuffer = maxSyncBufferDecoded - let mediaStreamSourceConfigurationsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.MediaStreamSourceConfigurationRequest?].self, forKey: .mediaStreamSourceConfigurations) - var mediaStreamSourceConfigurationsDecoded0:[MediaConnectClientTypes.MediaStreamSourceConfigurationRequest]? = nil - if let mediaStreamSourceConfigurationsContainer = mediaStreamSourceConfigurationsContainer { - mediaStreamSourceConfigurationsDecoded0 = [MediaConnectClientTypes.MediaStreamSourceConfigurationRequest]() - for structure0 in mediaStreamSourceConfigurationsContainer { - if let structure0 = structure0 { - mediaStreamSourceConfigurationsDecoded0?.append(structure0) - } - } - } - mediaStreamSourceConfigurations = mediaStreamSourceConfigurationsDecoded0 - let minLatencyDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .minLatency) - minLatency = minLatencyDecoded - let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) - name = nameDecoded - let protocolDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ModelProtocol.self, forKey: .protocol) - `protocol` = protocolDecoded - let senderControlPortDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .senderControlPort) - senderControlPort = senderControlPortDecoded - let senderIpAddressDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .senderIpAddress) - senderIpAddress = senderIpAddressDecoded - let sourceListenerAddressDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sourceListenerAddress) - sourceListenerAddress = sourceListenerAddressDecoded - let sourceListenerPortDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .sourceListenerPort) - sourceListenerPort = sourceListenerPortDecoded - let streamIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .streamId) - streamId = streamIdDecoded - let vpcInterfaceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .vpcInterfaceName) - vpcInterfaceName = vpcInterfaceNameDecoded - let whitelistCidrDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .whitelistCidr) - whitelistCidr = whitelistCidrDecoded - } -} - -extension MediaConnectClientTypes { - /// The settings for the source of the flow. - public struct SetSourceRequest: Swift.Equatable { - /// The type of encryption that is used on the content ingested from this source. - public var decryption: MediaConnectClientTypes.Encryption? - /// A description for the source. This value is not used or seen outside of the current AWS Elemental MediaConnect account. - public var description: Swift.String? - /// The ARN of the entitlement that allows you to subscribe to this flow. The entitlement is set by the flow originator, and the ARN is generated as part of the originator's flow. - public var entitlementArn: Swift.String? - /// The port that the flow will be listening on for incoming content. - public var ingestPort: Swift.Int? - /// The smoothing max bitrate for RIST, RTP, and RTP-FEC streams. - public var maxBitrate: Swift.Int? - /// The maximum latency in milliseconds. This parameter applies only to RIST-based, Zixi-based, and Fujitsu-based streams. - public var maxLatency: Swift.Int? - /// The size of the buffer (in milliseconds) to use to sync incoming source data. - public var maxSyncBuffer: Swift.Int? - /// The media streams that are associated with the source, and the parameters for those associations. - public var mediaStreamSourceConfigurations: [MediaConnectClientTypes.MediaStreamSourceConfigurationRequest]? - /// The minimum latency in milliseconds for SRT-based streams. In streams that use the SRT protocol, this value that you set on your MediaConnect source or output represents the minimal potential latency of that connection. The latency of the stream is set to the highest number between the sender’s minimum latency and the receiver’s minimum latency. - public var minLatency: Swift.Int? - /// The name of the source. - public var name: Swift.String? - /// The protocol that is used by the source. - public var `protocol`: MediaConnectClientTypes.ModelProtocol? - /// The port that the flow uses to send outbound requests to initiate connection with the sender. - public var senderControlPort: Swift.Int? - /// The IP address that the flow communicates with to initiate connection with the sender. - public var senderIpAddress: Swift.String? - /// Source IP or domain name for SRT-caller protocol. - public var sourceListenerAddress: Swift.String? - /// Source port for SRT-caller protocol. - public var sourceListenerPort: Swift.Int? - /// The stream ID that you want to use for this transport. This parameter applies only to Zixi-based streams. - public var streamId: Swift.String? - /// The name of the VPC interface to use for this source. - public var vpcInterfaceName: Swift.String? - /// The range of IP addresses that should be allowed to contribute content to your source. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16. - public var whitelistCidr: Swift.String? - - public init ( - decryption: MediaConnectClientTypes.Encryption? = nil, - description: Swift.String? = nil, - entitlementArn: Swift.String? = nil, - ingestPort: Swift.Int? = nil, - maxBitrate: Swift.Int? = nil, - maxLatency: Swift.Int? = nil, - maxSyncBuffer: Swift.Int? = nil, - mediaStreamSourceConfigurations: [MediaConnectClientTypes.MediaStreamSourceConfigurationRequest]? = nil, - minLatency: Swift.Int? = nil, - name: Swift.String? = nil, - `protocol`: MediaConnectClientTypes.ModelProtocol? = nil, - senderControlPort: Swift.Int? = nil, - senderIpAddress: Swift.String? = nil, - sourceListenerAddress: Swift.String? = nil, - sourceListenerPort: Swift.Int? = nil, - streamId: Swift.String? = nil, - vpcInterfaceName: Swift.String? = nil, - whitelistCidr: Swift.String? = nil - ) - { - self.decryption = decryption - self.description = description - self.entitlementArn = entitlementArn - self.ingestPort = ingestPort - self.maxBitrate = maxBitrate - self.maxLatency = maxLatency - self.maxSyncBuffer = maxSyncBuffer - self.mediaStreamSourceConfigurations = mediaStreamSourceConfigurations - self.minLatency = minLatency - self.name = name - self.`protocol` = `protocol` - self.senderControlPort = senderControlPort - self.senderIpAddress = senderIpAddress - self.sourceListenerAddress = sourceListenerAddress - self.sourceListenerPort = sourceListenerPort - self.streamId = streamId - self.vpcInterfaceName = vpcInterfaceName - self.whitelistCidr = whitelistCidr - } - } +} +struct TooManyRequestsExceptionBody: Swift.Equatable { + let message: Swift.String? } -extension MediaConnectClientTypes.Source: Swift.Codable { +extension TooManyRequestsExceptionBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case dataTransferSubscriberFeePercent = "dataTransferSubscriberFeePercent" - case decryption = "decryption" - case description = "description" - case entitlementArn = "entitlementArn" - case ingestIp = "ingestIp" - case ingestPort = "ingestPort" - case mediaStreamSourceConfigurations = "mediaStreamSourceConfigurations" - case name = "name" + case message = "message" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) + message = messageDecoded + } +} + +extension MediaConnectClientTypes.Transport: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case cidrAllowList = "cidrAllowList" + case maxBitrate = "maxBitrate" + case maxLatency = "maxLatency" + case maxSyncBuffer = "maxSyncBuffer" + case minLatency = "minLatency" + case `protocol` = "protocol" + case remoteId = "remoteId" case senderControlPort = "senderControlPort" case senderIpAddress = "senderIpAddress" - case sourceArn = "sourceArn" - case transport = "transport" - case vpcInterfaceName = "vpcInterfaceName" - case whitelistCidr = "whitelistCidr" + case smoothingLatency = "smoothingLatency" + case sourceListenerAddress = "sourceListenerAddress" + case sourceListenerPort = "sourceListenerPort" + case streamId = "streamId" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let dataTransferSubscriberFeePercent = self.dataTransferSubscriberFeePercent { - try encodeContainer.encode(dataTransferSubscriberFeePercent, forKey: .dataTransferSubscriberFeePercent) - } - if let decryption = self.decryption { - try encodeContainer.encode(decryption, forKey: .decryption) + if let cidrAllowList = cidrAllowList { + var cidrAllowListContainer = encodeContainer.nestedUnkeyedContainer(forKey: .cidrAllowList) + for __string0 in cidrAllowList { + try cidrAllowListContainer.encode(__string0) + } } - if let description = self.description { - try encodeContainer.encode(description, forKey: .description) + if let maxBitrate = self.maxBitrate { + try encodeContainer.encode(maxBitrate, forKey: .maxBitrate) } - if let entitlementArn = self.entitlementArn { - try encodeContainer.encode(entitlementArn, forKey: .entitlementArn) + if let maxLatency = self.maxLatency { + try encodeContainer.encode(maxLatency, forKey: .maxLatency) } - if let ingestIp = self.ingestIp { - try encodeContainer.encode(ingestIp, forKey: .ingestIp) + if let maxSyncBuffer = self.maxSyncBuffer { + try encodeContainer.encode(maxSyncBuffer, forKey: .maxSyncBuffer) } - if let ingestPort = self.ingestPort { - try encodeContainer.encode(ingestPort, forKey: .ingestPort) + if let minLatency = self.minLatency { + try encodeContainer.encode(minLatency, forKey: .minLatency) } - if let mediaStreamSourceConfigurations = mediaStreamSourceConfigurations { - var mediaStreamSourceConfigurationsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .mediaStreamSourceConfigurations) - for mediastreamsourceconfiguration0 in mediaStreamSourceConfigurations { - try mediaStreamSourceConfigurationsContainer.encode(mediastreamsourceconfiguration0) - } + if let `protocol` = self.`protocol` { + try encodeContainer.encode(`protocol`.rawValue, forKey: .`protocol`) } - if let name = self.name { - try encodeContainer.encode(name, forKey: .name) + if let remoteId = self.remoteId { + try encodeContainer.encode(remoteId, forKey: .remoteId) } if let senderControlPort = self.senderControlPort { try encodeContainer.encode(senderControlPort, forKey: .senderControlPort) @@ -7105,231 +12074,179 @@ extension MediaConnectClientTypes.Source: Swift.Codable { if let senderIpAddress = self.senderIpAddress { try encodeContainer.encode(senderIpAddress, forKey: .senderIpAddress) } - if let sourceArn = self.sourceArn { - try encodeContainer.encode(sourceArn, forKey: .sourceArn) + if let smoothingLatency = self.smoothingLatency { + try encodeContainer.encode(smoothingLatency, forKey: .smoothingLatency) } - if let transport = self.transport { - try encodeContainer.encode(transport, forKey: .transport) + if let sourceListenerAddress = self.sourceListenerAddress { + try encodeContainer.encode(sourceListenerAddress, forKey: .sourceListenerAddress) } - if let vpcInterfaceName = self.vpcInterfaceName { - try encodeContainer.encode(vpcInterfaceName, forKey: .vpcInterfaceName) + if let sourceListenerPort = self.sourceListenerPort { + try encodeContainer.encode(sourceListenerPort, forKey: .sourceListenerPort) } - if let whitelistCidr = self.whitelistCidr { - try encodeContainer.encode(whitelistCidr, forKey: .whitelistCidr) + if let streamId = self.streamId { + try encodeContainer.encode(streamId, forKey: .streamId) } } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let dataTransferSubscriberFeePercentDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .dataTransferSubscriberFeePercent) - dataTransferSubscriberFeePercent = dataTransferSubscriberFeePercentDecoded - let decryptionDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Encryption.self, forKey: .decryption) - decryption = decryptionDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let entitlementArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .entitlementArn) - entitlementArn = entitlementArnDecoded - let ingestIpDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .ingestIp) - ingestIp = ingestIpDecoded - let ingestPortDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .ingestPort) - ingestPort = ingestPortDecoded - let mediaStreamSourceConfigurationsContainer = try containerValues.decodeIfPresent([MediaConnectClientTypes.MediaStreamSourceConfiguration?].self, forKey: .mediaStreamSourceConfigurations) - var mediaStreamSourceConfigurationsDecoded0:[MediaConnectClientTypes.MediaStreamSourceConfiguration]? = nil - if let mediaStreamSourceConfigurationsContainer = mediaStreamSourceConfigurationsContainer { - mediaStreamSourceConfigurationsDecoded0 = [MediaConnectClientTypes.MediaStreamSourceConfiguration]() - for structure0 in mediaStreamSourceConfigurationsContainer { - if let structure0 = structure0 { - mediaStreamSourceConfigurationsDecoded0?.append(structure0) + let cidrAllowListContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .cidrAllowList) + var cidrAllowListDecoded0:[Swift.String]? = nil + if let cidrAllowListContainer = cidrAllowListContainer { + cidrAllowListDecoded0 = [Swift.String]() + for string0 in cidrAllowListContainer { + if let string0 = string0 { + cidrAllowListDecoded0?.append(string0) } } } - mediaStreamSourceConfigurations = mediaStreamSourceConfigurationsDecoded0 - let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) - name = nameDecoded + cidrAllowList = cidrAllowListDecoded0 + let maxBitrateDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxBitrate) + maxBitrate = maxBitrateDecoded + let maxLatencyDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxLatency) + maxLatency = maxLatencyDecoded + let maxSyncBufferDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxSyncBuffer) + maxSyncBuffer = maxSyncBufferDecoded + let minLatencyDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .minLatency) + minLatency = minLatencyDecoded + let protocolDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ModelProtocol.self, forKey: .protocol) + `protocol` = protocolDecoded + let remoteIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .remoteId) + remoteId = remoteIdDecoded let senderControlPortDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .senderControlPort) senderControlPort = senderControlPortDecoded let senderIpAddressDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .senderIpAddress) senderIpAddress = senderIpAddressDecoded - let sourceArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sourceArn) - sourceArn = sourceArnDecoded - let transportDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Transport.self, forKey: .transport) - transport = transportDecoded - let vpcInterfaceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .vpcInterfaceName) - vpcInterfaceName = vpcInterfaceNameDecoded - let whitelistCidrDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .whitelistCidr) - whitelistCidr = whitelistCidrDecoded + let smoothingLatencyDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .smoothingLatency) + smoothingLatency = smoothingLatencyDecoded + let sourceListenerAddressDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sourceListenerAddress) + sourceListenerAddress = sourceListenerAddressDecoded + let sourceListenerPortDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .sourceListenerPort) + sourceListenerPort = sourceListenerPortDecoded + let streamIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .streamId) + streamId = streamIdDecoded } } extension MediaConnectClientTypes { - /// The settings for the source of the flow. - public struct Source: Swift.Equatable { - /// Percentage from 0-100 of the data transfer cost to be billed to the subscriber. - public var dataTransferSubscriberFeePercent: Swift.Int? - /// The type of encryption that is used on the content ingested from this source. - public var decryption: MediaConnectClientTypes.Encryption? - /// A description for the source. This value is not used or seen outside of the current AWS Elemental MediaConnect account. - public var description: Swift.String? - /// The ARN of the entitlement that allows you to subscribe to content that comes from another AWS account. The entitlement is set by the content originator and the ARN is generated as part of the originator's flow. - public var entitlementArn: Swift.String? - /// The IP address that the flow will be listening on for incoming content. - public var ingestIp: Swift.String? - /// The port that the flow will be listening on for incoming content. - public var ingestPort: Swift.Int? - /// The media streams that are associated with the source, and the parameters for those associations. - public var mediaStreamSourceConfigurations: [MediaConnectClientTypes.MediaStreamSourceConfiguration]? - /// The name of the source. + /// Attributes related to the transport stream that are used in a source or output. + public struct Transport: Swift.Equatable { + /// The range of IP addresses that should be allowed to initiate output requests to this flow. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16. + public var cidrAllowList: [Swift.String]? + /// The smoothing max bitrate (in bps) for RIST, RTP, and RTP-FEC streams. + public var maxBitrate: Swift.Int? + /// The maximum latency in milliseconds. This parameter applies only to RIST-based, Zixi-based, and Fujitsu-based streams. + public var maxLatency: Swift.Int? + /// The size of the buffer (in milliseconds) to use to sync incoming source data. + public var maxSyncBuffer: Swift.Int? + /// The minimum latency in milliseconds for SRT-based streams. In streams that use the SRT protocol, this value that you set on your MediaConnect source or output represents the minimal potential latency of that connection. The latency of the stream is set to the highest number between the sender’s minimum latency and the receiver’s minimum latency. + public var minLatency: Swift.Int? + /// The protocol that is used by the source or output. /// This member is required. - public var name: Swift.String? + public var `protocol`: MediaConnectClientTypes.ModelProtocol? + /// The remote ID for the Zixi-pull stream. + public var remoteId: Swift.String? /// The port that the flow uses to send outbound requests to initiate connection with the sender. public var senderControlPort: Swift.Int? - /// The IP address that the flow communicates with to initiate connection with the sender. - public var senderIpAddress: Swift.String? - /// The ARN of the source. - /// This member is required. - public var sourceArn: Swift.String? - /// Attributes related to the transport stream that are used in the source. - public var transport: MediaConnectClientTypes.Transport? - /// The name of the VPC interface that is used for this source. - public var vpcInterfaceName: Swift.String? - /// The range of IP addresses that should be allowed to contribute content to your source. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16. - public var whitelistCidr: Swift.String? - - public init ( - dataTransferSubscriberFeePercent: Swift.Int? = nil, - decryption: MediaConnectClientTypes.Encryption? = nil, - description: Swift.String? = nil, - entitlementArn: Swift.String? = nil, - ingestIp: Swift.String? = nil, - ingestPort: Swift.Int? = nil, - mediaStreamSourceConfigurations: [MediaConnectClientTypes.MediaStreamSourceConfiguration]? = nil, - name: Swift.String? = nil, - senderControlPort: Swift.Int? = nil, - senderIpAddress: Swift.String? = nil, - sourceArn: Swift.String? = nil, - transport: MediaConnectClientTypes.Transport? = nil, - vpcInterfaceName: Swift.String? = nil, - whitelistCidr: Swift.String? = nil - ) - { - self.dataTransferSubscriberFeePercent = dataTransferSubscriberFeePercent - self.decryption = decryption - self.description = description - self.entitlementArn = entitlementArn - self.ingestIp = ingestIp - self.ingestPort = ingestPort - self.mediaStreamSourceConfigurations = mediaStreamSourceConfigurations - self.name = name - self.senderControlPort = senderControlPort - self.senderIpAddress = senderIpAddress - self.sourceArn = sourceArn - self.transport = transport - self.vpcInterfaceName = vpcInterfaceName - self.whitelistCidr = whitelistCidr - } - } - -} - -extension MediaConnectClientTypes.SourcePriority: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case primarySource = "primarySource" - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let primarySource = self.primarySource { - try encodeContainer.encode(primarySource, forKey: .primarySource) - } - } - - public init (from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let primarySourceDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .primarySource) - primarySource = primarySourceDecoded - } -} - -extension MediaConnectClientTypes { - /// The priority you want to assign to a source. You can have a primary stream and a backup stream or two equally prioritized streams. - public struct SourcePriority: Swift.Equatable { - /// The name of the source you choose as the primary source for this flow. - public var primarySource: Swift.String? + /// The IP address that the flow communicates with to initiate connection with the sender. + public var senderIpAddress: Swift.String? + /// The smoothing latency in milliseconds for RIST, RTP, and RTP-FEC streams. + public var smoothingLatency: Swift.Int? + /// Source IP or domain name for SRT-caller protocol. + public var sourceListenerAddress: Swift.String? + /// Source port for SRT-caller protocol. + public var sourceListenerPort: Swift.Int? + /// The stream ID that you want to use for this transport. This parameter applies only to Zixi and SRT caller-based streams. + public var streamId: Swift.String? public init ( - primarySource: Swift.String? = nil + cidrAllowList: [Swift.String]? = nil, + maxBitrate: Swift.Int? = nil, + maxLatency: Swift.Int? = nil, + maxSyncBuffer: Swift.Int? = nil, + minLatency: Swift.Int? = nil, + `protocol`: MediaConnectClientTypes.ModelProtocol? = nil, + remoteId: Swift.String? = nil, + senderControlPort: Swift.Int? = nil, + senderIpAddress: Swift.String? = nil, + smoothingLatency: Swift.Int? = nil, + sourceListenerAddress: Swift.String? = nil, + sourceListenerPort: Swift.Int? = nil, + streamId: Swift.String? = nil ) { - self.primarySource = primarySource + self.cidrAllowList = cidrAllowList + self.maxBitrate = maxBitrate + self.maxLatency = maxLatency + self.maxSyncBuffer = maxSyncBuffer + self.minLatency = minLatency + self.`protocol` = `protocol` + self.remoteId = remoteId + self.senderControlPort = senderControlPort + self.senderIpAddress = senderIpAddress + self.smoothingLatency = smoothingLatency + self.sourceListenerAddress = sourceListenerAddress + self.sourceListenerPort = sourceListenerPort + self.streamId = streamId } } } -extension MediaConnectClientTypes { - public enum SourceType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case entitled - case owned - case sdkUnknown(Swift.String) - - public static var allCases: [SourceType] { - return [ - .entitled, - .owned, - .sdkUnknown("") - ] - } - 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 .entitled: return "ENTITLED" - case .owned: return "OWNED" - case let .sdkUnknown(s): return s +extension UntagResourceInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + guard let tagKeys = tagKeys else { + let message = "Creating a URL Query Item failed. tagKeys is required and must not be nil." + throw ClientRuntime.ClientError.queryItemCreationFailed(message) } - } - public init(from decoder: Swift.Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(RawValue.self) - self = SourceType(rawValue: rawValue) ?? SourceType.sdkUnknown(rawValue) + tagKeys.forEach { queryItemValue in + let queryItem = ClientRuntime.URLQueryItem(name: "tagKeys".urlPercentEncoding(), value: Swift.String(queryItemValue).urlPercentEncoding()) + items.append(queryItem) + } + return items } } } -extension StartFlowInput: ClientRuntime.URLPathProvider { +extension UntagResourceInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let flowArn = flowArn else { + guard let resourceArn = resourceArn else { return nil } - return "/v1/flows/start/\(flowArn.urlPercentEncoding())" + return "/tags/\(resourceArn.urlPercentEncoding())" } } -public struct StartFlowInput: Swift.Equatable { - /// The ARN of the flow that you want to start. +public struct UntagResourceInput: Swift.Equatable { + /// The Amazon Resource Name (ARN) that identifies the AWS Elemental MediaConnect resource from which to delete tags. /// This member is required. - public var flowArn: Swift.String? + public var resourceArn: Swift.String? + /// The keys of the tags to be removed. + /// This member is required. + public var tagKeys: [Swift.String]? public init ( - flowArn: Swift.String? = nil + resourceArn: Swift.String? = nil, + tagKeys: [Swift.String]? = nil ) { - self.flowArn = flowArn + self.resourceArn = resourceArn + self.tagKeys = tagKeys } } -struct StartFlowInputBody: Swift.Equatable { +struct UntagResourceInputBody: Swift.Equatable { } -extension StartFlowInputBody: Swift.Decodable { +extension UntagResourceInputBody: Swift.Decodable { public init (from decoder: Swift.Decoder) throws { } } -extension StartFlowOutputError: ClientRuntime.HttpResponseBinding { +extension UntagResourceOutputError: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) @@ -7337,192 +12254,298 @@ extension StartFlowOutputError: ClientRuntime.HttpResponseBinding { } } -extension StartFlowOutputError { +extension UntagResourceOutputError { public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { switch errorType { case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) - case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) } } } -public enum StartFlowOutputError: Swift.Error, Swift.Equatable { +public enum UntagResourceOutputError: Swift.Error, Swift.Equatable { case badRequestException(BadRequestException) - case forbiddenException(ForbiddenException) case internalServerErrorException(InternalServerErrorException) case notFoundException(NotFoundException) - case serviceUnavailableException(ServiceUnavailableException) - case tooManyRequestsException(TooManyRequestsException) case unknown(UnknownAWSHttpServiceError) } -extension StartFlowOutputResponse: ClientRuntime.HttpResponseBinding { +extension UntagResourceOutputResponse: ClientRuntime.HttpResponseBinding { public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { - if case .stream(let reader) = httpResponse.body, - let responseDecoder = decoder { - let data = reader.toBytes().getData() - let output: StartFlowOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.flowArn = output.flowArn - self.status = output.status - } else { - self.flowArn = nil - self.status = nil - } } } -public struct StartFlowOutputResponse: Swift.Equatable { - /// The ARN of the flow that you started. - public var flowArn: Swift.String? - /// The status of the flow when the StartFlow process begins. - public var status: MediaConnectClientTypes.Status? - - public init ( - flowArn: Swift.String? = nil, - status: MediaConnectClientTypes.Status? = nil - ) - { - self.flowArn = flowArn - self.status = status - } -} +public struct UntagResourceOutputResponse: Swift.Equatable { -struct StartFlowOutputResponseBody: Swift.Equatable { - let flowArn: Swift.String? - let status: MediaConnectClientTypes.Status? + public init () { } } -extension StartFlowOutputResponseBody: Swift.Decodable { +extension MediaConnectClientTypes.UpdateBridgeFlowSourceRequest: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case flowArn = "flowArn" - case status = "status" + case flowVpcInterfaceAttachment = "flowVpcInterfaceAttachment" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let flowArn = self.flowArn { + try encodeContainer.encode(flowArn, forKey: .flowArn) + } + if let flowVpcInterfaceAttachment = self.flowVpcInterfaceAttachment { + try encodeContainer.encode(flowVpcInterfaceAttachment, forKey: .flowVpcInterfaceAttachment) + } } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) flowArn = flowArnDecoded - let statusDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Status.self, forKey: .status) - status = statusDecoded + let flowVpcInterfaceAttachmentDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.VpcInterfaceAttachment.self, forKey: .flowVpcInterfaceAttachment) + flowVpcInterfaceAttachment = flowVpcInterfaceAttachmentDecoded } } extension MediaConnectClientTypes { - public enum State: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case disabled - case enabled - case sdkUnknown(Swift.String) + /// Update the flow source of the bridge. + public struct UpdateBridgeFlowSourceRequest: Swift.Equatable { + /// The ARN of the cloud flow to use as a source of this bridge. + public var flowArn: Swift.String? + /// The name of the VPC interface attachment to use for this source. + public var flowVpcInterfaceAttachment: MediaConnectClientTypes.VpcInterfaceAttachment? - public static var allCases: [State] { - return [ - .disabled, - .enabled, - .sdkUnknown("") - ] + public init ( + flowArn: Swift.String? = nil, + flowVpcInterfaceAttachment: MediaConnectClientTypes.VpcInterfaceAttachment? = nil + ) + { + self.flowArn = flowArn + self.flowVpcInterfaceAttachment = flowVpcInterfaceAttachment } - public init?(rawValue: Swift.String) { - let value = Self.allCases.first(where: { $0.rawValue == rawValue }) - self = value ?? Self.sdkUnknown(rawValue) + } + +} + +extension UpdateBridgeInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case egressGatewayBridge = "egressGatewayBridge" + case ingressGatewayBridge = "ingressGatewayBridge" + case sourceFailoverConfig = "sourceFailoverConfig" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let egressGatewayBridge = self.egressGatewayBridge { + try encodeContainer.encode(egressGatewayBridge, forKey: .egressGatewayBridge) } - public var rawValue: Swift.String { - switch self { - case .disabled: return "DISABLED" - case .enabled: return "ENABLED" - case let .sdkUnknown(s): return s - } + if let ingressGatewayBridge = self.ingressGatewayBridge { + try encodeContainer.encode(ingressGatewayBridge, forKey: .ingressGatewayBridge) } - public init(from decoder: Swift.Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(RawValue.self) - self = State(rawValue: rawValue) ?? State.sdkUnknown(rawValue) + if let sourceFailoverConfig = self.sourceFailoverConfig { + try encodeContainer.encode(sourceFailoverConfig, forKey: .sourceFailoverConfig) } } } -extension MediaConnectClientTypes { - public enum Status: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case active - case deleting - case error - case standby - case starting - case stopping - case updating - case sdkUnknown(Swift.String) +extension UpdateBridgeInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let bridgeArn = bridgeArn else { + return nil + } + return "/v1/bridges/\(bridgeArn.urlPercentEncoding())" + } +} - public static var allCases: [Status] { - return [ - .active, - .deleting, - .error, - .standby, - .starting, - .stopping, - .updating, - .sdkUnknown("") - ] +/// A request to update the bridge. +public struct UpdateBridgeInput: Swift.Equatable { + /// The Amazon Resource Number (ARN) of the bridge that you want to update. + /// This member is required. + public var bridgeArn: Swift.String? + public var egressGatewayBridge: MediaConnectClientTypes.UpdateEgressGatewayBridgeRequest? + public var ingressGatewayBridge: MediaConnectClientTypes.UpdateIngressGatewayBridgeRequest? + /// The settings for source failover. + public var sourceFailoverConfig: MediaConnectClientTypes.UpdateFailoverConfig? + + public init ( + bridgeArn: Swift.String? = nil, + egressGatewayBridge: MediaConnectClientTypes.UpdateEgressGatewayBridgeRequest? = nil, + ingressGatewayBridge: MediaConnectClientTypes.UpdateIngressGatewayBridgeRequest? = nil, + sourceFailoverConfig: MediaConnectClientTypes.UpdateFailoverConfig? = nil + ) + { + self.bridgeArn = bridgeArn + self.egressGatewayBridge = egressGatewayBridge + self.ingressGatewayBridge = ingressGatewayBridge + self.sourceFailoverConfig = sourceFailoverConfig + } +} + +struct UpdateBridgeInputBody: Swift.Equatable { + let egressGatewayBridge: MediaConnectClientTypes.UpdateEgressGatewayBridgeRequest? + let ingressGatewayBridge: MediaConnectClientTypes.UpdateIngressGatewayBridgeRequest? + let sourceFailoverConfig: MediaConnectClientTypes.UpdateFailoverConfig? +} + +extension UpdateBridgeInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case egressGatewayBridge = "egressGatewayBridge" + case ingressGatewayBridge = "ingressGatewayBridge" + case sourceFailoverConfig = "sourceFailoverConfig" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let egressGatewayBridgeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.UpdateEgressGatewayBridgeRequest.self, forKey: .egressGatewayBridge) + egressGatewayBridge = egressGatewayBridgeDecoded + let ingressGatewayBridgeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.UpdateIngressGatewayBridgeRequest.self, forKey: .ingressGatewayBridge) + ingressGatewayBridge = ingressGatewayBridgeDecoded + let sourceFailoverConfigDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.UpdateFailoverConfig.self, forKey: .sourceFailoverConfig) + sourceFailoverConfig = sourceFailoverConfigDecoded + } +} + +extension MediaConnectClientTypes.UpdateBridgeNetworkOutputRequest: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case ipAddress = "ipAddress" + case networkName = "networkName" + case port = "port" + case `protocol` = "protocol" + case ttl = "ttl" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let ipAddress = self.ipAddress { + try encodeContainer.encode(ipAddress, forKey: .ipAddress) } - public init?(rawValue: Swift.String) { - let value = Self.allCases.first(where: { $0.rawValue == rawValue }) - self = value ?? Self.sdkUnknown(rawValue) + if let networkName = self.networkName { + try encodeContainer.encode(networkName, forKey: .networkName) } - public var rawValue: Swift.String { - switch self { - case .active: return "ACTIVE" - case .deleting: return "DELETING" - case .error: return "ERROR" - case .standby: return "STANDBY" - case .starting: return "STARTING" - case .stopping: return "STOPPING" - case .updating: return "UPDATING" - case let .sdkUnknown(s): return s - } + if let port = self.port { + try encodeContainer.encode(port, forKey: .port) } - public init(from decoder: Swift.Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(RawValue.self) - self = Status(rawValue: rawValue) ?? Status.sdkUnknown(rawValue) + if let `protocol` = self.`protocol` { + try encodeContainer.encode(`protocol`.rawValue, forKey: .`protocol`) + } + if let ttl = self.ttl { + try encodeContainer.encode(ttl, forKey: .ttl) } } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let ipAddressDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .ipAddress) + ipAddress = ipAddressDecoded + let networkNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .networkName) + networkName = networkNameDecoded + let portDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .port) + port = portDecoded + let protocolDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ModelProtocol.self, forKey: .protocol) + `protocol` = protocolDecoded + let ttlDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .ttl) + ttl = ttlDecoded + } } -extension StopFlowInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let flowArn = flowArn else { - return nil +extension MediaConnectClientTypes { + /// Update an existing network output. + public struct UpdateBridgeNetworkOutputRequest: Swift.Equatable { + /// The network output IP Address. + public var ipAddress: Swift.String? + /// The network output's gateway network name. + public var networkName: Swift.String? + /// The network output port. + public var port: Swift.Int? + /// The network output protocol. + public var `protocol`: MediaConnectClientTypes.ModelProtocol? + /// The network output TTL. + public var ttl: Swift.Int? + + public init ( + ipAddress: Swift.String? = nil, + networkName: Swift.String? = nil, + port: Swift.Int? = nil, + `protocol`: MediaConnectClientTypes.ModelProtocol? = nil, + ttl: Swift.Int? = nil + ) + { + self.ipAddress = ipAddress + self.networkName = networkName + self.port = port + self.`protocol` = `protocol` + self.ttl = ttl } - return "/v1/flows/stop/\(flowArn.urlPercentEncoding())" } + } -public struct StopFlowInput: Swift.Equatable { - /// The ARN of the flow that you want to stop. - /// This member is required. - public var flowArn: Swift.String? +extension MediaConnectClientTypes.UpdateBridgeNetworkSourceRequest: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case multicastIp = "multicastIp" + case networkName = "networkName" + case port = "port" + case `protocol` = "protocol" + } - public init ( - flowArn: Swift.String? = nil - ) - { - self.flowArn = flowArn + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let multicastIp = self.multicastIp { + try encodeContainer.encode(multicastIp, forKey: .multicastIp) + } + if let networkName = self.networkName { + try encodeContainer.encode(networkName, forKey: .networkName) + } + if let port = self.port { + try encodeContainer.encode(port, forKey: .port) + } + if let `protocol` = self.`protocol` { + try encodeContainer.encode(`protocol`.rawValue, forKey: .`protocol`) + } } -} -struct StopFlowInputBody: Swift.Equatable { + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let multicastIpDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .multicastIp) + multicastIp = multicastIpDecoded + let networkNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .networkName) + networkName = networkNameDecoded + let portDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .port) + port = portDecoded + let protocolDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ModelProtocol.self, forKey: .protocol) + `protocol` = protocolDecoded + } } -extension StopFlowInputBody: Swift.Decodable { +extension MediaConnectClientTypes { + /// Update the network source of the bridge. + public struct UpdateBridgeNetworkSourceRequest: Swift.Equatable { + /// The network source multicast IP. + public var multicastIp: Swift.String? + /// The network source's gateway network name. + public var networkName: Swift.String? + /// The network source port. + public var port: Swift.Int? + /// The network source protocol. + public var `protocol`: MediaConnectClientTypes.ModelProtocol? - public init (from decoder: Swift.Decoder) throws { + public init ( + multicastIp: Swift.String? = nil, + networkName: Swift.String? = nil, + port: Swift.Int? = nil, + `protocol`: MediaConnectClientTypes.ModelProtocol? = nil + ) + { + self.multicastIp = multicastIp + self.networkName = networkName + self.port = port + self.`protocol` = `protocol` + } } + } -extension StopFlowOutputError: ClientRuntime.HttpResponseBinding { +extension UpdateBridgeOutputError: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) @@ -7530,10 +12553,11 @@ extension StopFlowOutputError: ClientRuntime.HttpResponseBinding { } } -extension StopFlowOutputError { +extension UpdateBridgeOutputError { public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { switch errorType { case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ConflictException" : self = .conflictException(try ConflictException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) @@ -7544,8 +12568,9 @@ extension StopFlowOutputError { } } -public enum StopFlowOutputError: Swift.Error, Swift.Equatable { +public enum UpdateBridgeOutputError: Swift.Error, Swift.Equatable { case badRequestException(BadRequestException) + case conflictException(ConflictException) case forbiddenException(ForbiddenException) case internalServerErrorException(InternalServerErrorException) case notFoundException(NotFoundException) @@ -7554,127 +12579,71 @@ public enum StopFlowOutputError: Swift.Error, Swift.Equatable { case unknown(UnknownAWSHttpServiceError) } -extension StopFlowOutputResponse: ClientRuntime.HttpResponseBinding { - public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { - if case .stream(let reader) = httpResponse.body, - let responseDecoder = decoder { - let data = reader.toBytes().getData() - let output: StopFlowOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.flowArn = output.flowArn - self.status = output.status - } else { - self.flowArn = nil - self.status = nil - } - } -} - -public struct StopFlowOutputResponse: Swift.Equatable { - /// The ARN of the flow that you stopped. - public var flowArn: Swift.String? - /// The status of the flow when the StopFlow process begins. - public var status: MediaConnectClientTypes.Status? - - public init ( - flowArn: Swift.String? = nil, - status: MediaConnectClientTypes.Status? = nil - ) - { - self.flowArn = flowArn - self.status = status - } -} - -struct StopFlowOutputResponseBody: Swift.Equatable { - let flowArn: Swift.String? - let status: MediaConnectClientTypes.Status? -} - -extension StopFlowOutputResponseBody: Swift.Decodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case flowArn = "flowArn" - case status = "status" - } - - public init (from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let flowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .flowArn) - flowArn = flowArnDecoded - let statusDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Status.self, forKey: .status) - status = statusDecoded - } -} - -extension TagResourceInput: Swift.Encodable { +extension UpdateBridgeOutputInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case tags = "tags" + case networkOutput = "networkOutput" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let tags = tags { - var tagsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .tags) - for (dictKey0, __mapOf__string0) in tags { - try tagsContainer.encode(__mapOf__string0, forKey: ClientRuntime.Key(stringValue: dictKey0)) - } + if let networkOutput = self.networkOutput { + try encodeContainer.encode(networkOutput, forKey: .networkOutput) } } } -extension TagResourceInput: ClientRuntime.URLPathProvider { +extension UpdateBridgeOutputInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let resourceArn = resourceArn else { + guard let bridgeArn = bridgeArn else { return nil } - return "/tags/\(resourceArn.urlPercentEncoding())" + guard let outputName = outputName else { + return nil + } + return "/v1/bridges/\(bridgeArn.urlPercentEncoding())/outputs/\(outputName.urlPercentEncoding())" } } -/// The tags to add to the resource. A tag is an array of key-value pairs. Tag keys can have a maximum character length of 128 characters, and tag values can have a maximum length of 256 characters. -public struct TagResourceInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) that identifies the AWS Elemental MediaConnect resource to which to add tags. +/// The fields that you want to update in the bridge output. +public struct UpdateBridgeOutputInput: Swift.Equatable { + /// The ARN of the bridge that you want to update. /// This member is required. - public var resourceArn: Swift.String? - /// A map from tag keys to values. Tag keys can have a maximum character length of 128 characters, and tag values can have a maximum length of 256 characters. + public var bridgeArn: Swift.String? + /// Update an existing network output. + public var networkOutput: MediaConnectClientTypes.UpdateBridgeNetworkOutputRequest? + /// The name of the bridge output that you want to update. /// This member is required. - public var tags: [Swift.String:Swift.String]? + public var outputName: Swift.String? public init ( - resourceArn: Swift.String? = nil, - tags: [Swift.String:Swift.String]? = nil + bridgeArn: Swift.String? = nil, + networkOutput: MediaConnectClientTypes.UpdateBridgeNetworkOutputRequest? = nil, + outputName: Swift.String? = nil ) { - self.resourceArn = resourceArn - self.tags = tags + self.bridgeArn = bridgeArn + self.networkOutput = networkOutput + self.outputName = outputName } } -struct TagResourceInputBody: Swift.Equatable { - let tags: [Swift.String:Swift.String]? +struct UpdateBridgeOutputInputBody: Swift.Equatable { + let networkOutput: MediaConnectClientTypes.UpdateBridgeNetworkOutputRequest? } -extension TagResourceInputBody: Swift.Decodable { +extension UpdateBridgeOutputInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case tags = "tags" + case networkOutput = "networkOutput" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let tagsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .tags) - var tagsDecoded0: [Swift.String:Swift.String]? = nil - if let tagsContainer = tagsContainer { - tagsDecoded0 = [Swift.String:Swift.String]() - for (key0, __string0) in tagsContainer { - if let __string0 = __string0 { - tagsDecoded0?[key0] = __string0 - } - } - } - tags = tagsDecoded0 + let networkOutputDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.UpdateBridgeNetworkOutputRequest.self, forKey: .networkOutput) + networkOutput = networkOutputDecoded } } -extension TagResourceOutputError: ClientRuntime.HttpResponseBinding { +extension UpdateBridgeOutputOutputError: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) @@ -7682,363 +12651,342 @@ extension TagResourceOutputError: ClientRuntime.HttpResponseBinding { } } -extension TagResourceOutputError { +extension UpdateBridgeOutputOutputError { public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { switch errorType { case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ConflictException" : self = .conflictException(try ConflictException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) } } } -public enum TagResourceOutputError: Swift.Error, Swift.Equatable { +public enum UpdateBridgeOutputOutputError: Swift.Error, Swift.Equatable { case badRequestException(BadRequestException) + case conflictException(ConflictException) + case forbiddenException(ForbiddenException) case internalServerErrorException(InternalServerErrorException) case notFoundException(NotFoundException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) case unknown(UnknownAWSHttpServiceError) } -extension TagResourceOutputResponse: ClientRuntime.HttpResponseBinding { +extension UpdateBridgeOutputOutputResponse: ClientRuntime.HttpResponseBinding { public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: UpdateBridgeOutputOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.bridgeArn = output.bridgeArn + self.output = output.output + } else { + self.bridgeArn = nil + self.output = nil + } } } -public struct TagResourceOutputResponse: Swift.Equatable { - - public init () { } -} - -extension MediaConnectClientTypes { - public enum Tcs: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case bt2100linhlg - case bt2100linpq - case density - case hlg - case linear - case pq - case sdr - case st20651 - case st4281 - case sdkUnknown(Swift.String) +public struct UpdateBridgeOutputOutputResponse: Swift.Equatable { + /// The Amazon Resource Number (ARN) of the bridge. + public var bridgeArn: Swift.String? + /// The output that you updated. + public var output: MediaConnectClientTypes.BridgeOutput? - public static var allCases: [Tcs] { - return [ - .bt2100linhlg, - .bt2100linpq, - .density, - .hlg, - .linear, - .pq, - .sdr, - .st20651, - .st4281, - .sdkUnknown("") - ] - } - 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 .bt2100linhlg: return "BT2100LINHLG" - case .bt2100linpq: return "BT2100LINPQ" - case .density: return "DENSITY" - case .hlg: return "HLG" - case .linear: return "LINEAR" - case .pq: return "PQ" - case .sdr: return "SDR" - case .st20651: return "ST2065-1" - case .st4281: return "ST428-1" - case let .sdkUnknown(s): return s - } - } - public init(from decoder: Swift.Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(RawValue.self) - self = Tcs(rawValue: rawValue) ?? Tcs.sdkUnknown(rawValue) - } + public init ( + bridgeArn: Swift.String? = nil, + output: MediaConnectClientTypes.BridgeOutput? = nil + ) + { + self.bridgeArn = bridgeArn + self.output = output } } -extension TooManyRequestsException { - public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { +struct UpdateBridgeOutputOutputResponseBody: Swift.Equatable { + let bridgeArn: Swift.String? + let output: MediaConnectClientTypes.BridgeOutput? +} + +extension UpdateBridgeOutputOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case bridgeArn = "bridgeArn" + case output = "output" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let bridgeArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .bridgeArn) + bridgeArn = bridgeArnDecoded + let outputDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.BridgeOutput.self, forKey: .output) + output = outputDecoded + } +} + +extension UpdateBridgeOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { if case .stream(let reader) = httpResponse.body, let responseDecoder = decoder { let data = reader.toBytes().getData() - let output: TooManyRequestsExceptionBody = try responseDecoder.decode(responseBody: data) - self.message = output.message + let output: UpdateBridgeOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.bridge = output.bridge } else { - self.message = nil + self.bridge = nil } - self._headers = httpResponse.headers - self._statusCode = httpResponse.statusCode - self._requestID = requestID - self._message = message } } -/// Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception. -public struct TooManyRequestsException: AWSClientRuntime.AWSHttpServiceError, Swift.Equatable { - public var _headers: ClientRuntime.Headers? - public var _statusCode: ClientRuntime.HttpStatusCode? - public var _message: Swift.String? - public var _requestID: Swift.String? - public var _retryable: Swift.Bool = false - public var _isThrottling: Swift.Bool = false - public var _type: ClientRuntime.ErrorType = .client - /// The error message returned by AWS Elemental MediaConnect. - /// This member is required. - public var message: Swift.String? +public struct UpdateBridgeOutputResponse: Swift.Equatable { + /// A Bridge is the connection between your datacenter's Instances and the AWS cloud. A bridge can be used to send video from the AWS cloud to your datacenter or from your datacenter to the AWS cloud. + public var bridge: MediaConnectClientTypes.Bridge? public init ( - message: Swift.String? = nil + bridge: MediaConnectClientTypes.Bridge? = nil ) { - self.message = message + self.bridge = bridge } } -struct TooManyRequestsExceptionBody: Swift.Equatable { - let message: Swift.String? +struct UpdateBridgeOutputResponseBody: Swift.Equatable { + let bridge: MediaConnectClientTypes.Bridge? } -extension TooManyRequestsExceptionBody: Swift.Decodable { +extension UpdateBridgeOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case message = "message" + case bridge = "bridge" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) - message = messageDecoded + let bridgeDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.Bridge.self, forKey: .bridge) + bridge = bridgeDecoded } } -extension MediaConnectClientTypes.Transport: Swift.Codable { +extension UpdateBridgeSourceInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case cidrAllowList = "cidrAllowList" - case maxBitrate = "maxBitrate" - case maxLatency = "maxLatency" - case maxSyncBuffer = "maxSyncBuffer" - case minLatency = "minLatency" - case `protocol` = "protocol" - case remoteId = "remoteId" - case senderControlPort = "senderControlPort" - case senderIpAddress = "senderIpAddress" - case smoothingLatency = "smoothingLatency" - case sourceListenerAddress = "sourceListenerAddress" - case sourceListenerPort = "sourceListenerPort" - case streamId = "streamId" + case flowSource = "flowSource" + case networkSource = "networkSource" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let cidrAllowList = cidrAllowList { - var cidrAllowListContainer = encodeContainer.nestedUnkeyedContainer(forKey: .cidrAllowList) - for __string0 in cidrAllowList { - try cidrAllowListContainer.encode(__string0) - } - } - if let maxBitrate = self.maxBitrate { - try encodeContainer.encode(maxBitrate, forKey: .maxBitrate) - } - if let maxLatency = self.maxLatency { - try encodeContainer.encode(maxLatency, forKey: .maxLatency) - } - if let maxSyncBuffer = self.maxSyncBuffer { - try encodeContainer.encode(maxSyncBuffer, forKey: .maxSyncBuffer) - } - if let minLatency = self.minLatency { - try encodeContainer.encode(minLatency, forKey: .minLatency) - } - if let `protocol` = self.`protocol` { - try encodeContainer.encode(`protocol`.rawValue, forKey: .`protocol`) + if let flowSource = self.flowSource { + try encodeContainer.encode(flowSource, forKey: .flowSource) } - if let remoteId = self.remoteId { - try encodeContainer.encode(remoteId, forKey: .remoteId) - } - if let senderControlPort = self.senderControlPort { - try encodeContainer.encode(senderControlPort, forKey: .senderControlPort) - } - if let senderIpAddress = self.senderIpAddress { - try encodeContainer.encode(senderIpAddress, forKey: .senderIpAddress) + if let networkSource = self.networkSource { + try encodeContainer.encode(networkSource, forKey: .networkSource) } - if let smoothingLatency = self.smoothingLatency { - try encodeContainer.encode(smoothingLatency, forKey: .smoothingLatency) - } - if let sourceListenerAddress = self.sourceListenerAddress { - try encodeContainer.encode(sourceListenerAddress, forKey: .sourceListenerAddress) - } - if let sourceListenerPort = self.sourceListenerPort { - try encodeContainer.encode(sourceListenerPort, forKey: .sourceListenerPort) + } +} + +extension UpdateBridgeSourceInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let bridgeArn = bridgeArn else { + return nil } - if let streamId = self.streamId { - try encodeContainer.encode(streamId, forKey: .streamId) + guard let sourceName = sourceName else { + return nil } + return "/v1/bridges/\(bridgeArn.urlPercentEncoding())/sources/\(sourceName.urlPercentEncoding())" + } +} + +/// The fields that you want to update in the bridge source. +public struct UpdateBridgeSourceInput: Swift.Equatable { + /// The ARN of the bridge that you want to update. + /// This member is required. + public var bridgeArn: Swift.String? + /// Update the flow source of the bridge. + public var flowSource: MediaConnectClientTypes.UpdateBridgeFlowSourceRequest? + /// Update the network source of the bridge. + public var networkSource: MediaConnectClientTypes.UpdateBridgeNetworkSourceRequest? + /// The name of the source that you want to update. + /// This member is required. + public var sourceName: Swift.String? + + public init ( + bridgeArn: Swift.String? = nil, + flowSource: MediaConnectClientTypes.UpdateBridgeFlowSourceRequest? = nil, + networkSource: MediaConnectClientTypes.UpdateBridgeNetworkSourceRequest? = nil, + sourceName: Swift.String? = nil + ) + { + self.bridgeArn = bridgeArn + self.flowSource = flowSource + self.networkSource = networkSource + self.sourceName = sourceName + } +} + +struct UpdateBridgeSourceInputBody: Swift.Equatable { + let flowSource: MediaConnectClientTypes.UpdateBridgeFlowSourceRequest? + let networkSource: MediaConnectClientTypes.UpdateBridgeNetworkSourceRequest? +} + +extension UpdateBridgeSourceInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case flowSource = "flowSource" + case networkSource = "networkSource" } public init (from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let cidrAllowListContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .cidrAllowList) - var cidrAllowListDecoded0:[Swift.String]? = nil - if let cidrAllowListContainer = cidrAllowListContainer { - cidrAllowListDecoded0 = [Swift.String]() - for string0 in cidrAllowListContainer { - if let string0 = string0 { - cidrAllowListDecoded0?.append(string0) - } - } + let flowSourceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.UpdateBridgeFlowSourceRequest.self, forKey: .flowSource) + flowSource = flowSourceDecoded + let networkSourceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.UpdateBridgeNetworkSourceRequest.self, forKey: .networkSource) + networkSource = networkSourceDecoded + } +} + +extension UpdateBridgeSourceOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} + +extension UpdateBridgeSourceOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ConflictException" : self = .conflictException(try ConflictException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) } - cidrAllowList = cidrAllowListDecoded0 - let maxBitrateDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxBitrate) - maxBitrate = maxBitrateDecoded - let maxLatencyDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxLatency) - maxLatency = maxLatencyDecoded - let maxSyncBufferDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxSyncBuffer) - maxSyncBuffer = maxSyncBufferDecoded - let minLatencyDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .minLatency) - minLatency = minLatencyDecoded - let protocolDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.ModelProtocol.self, forKey: .protocol) - `protocol` = protocolDecoded - let remoteIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .remoteId) - remoteId = remoteIdDecoded - let senderControlPortDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .senderControlPort) - senderControlPort = senderControlPortDecoded - let senderIpAddressDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .senderIpAddress) - senderIpAddress = senderIpAddressDecoded - let smoothingLatencyDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .smoothingLatency) - smoothingLatency = smoothingLatencyDecoded - let sourceListenerAddressDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sourceListenerAddress) - sourceListenerAddress = sourceListenerAddressDecoded - let sourceListenerPortDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .sourceListenerPort) - sourceListenerPort = sourceListenerPortDecoded - let streamIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .streamId) - streamId = streamIdDecoded } } -extension MediaConnectClientTypes { - /// Attributes related to the transport stream that are used in a source or output. - public struct Transport: Swift.Equatable { - /// The range of IP addresses that should be allowed to initiate output requests to this flow. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16. - public var cidrAllowList: [Swift.String]? - /// The smoothing max bitrate for RIST, RTP, and RTP-FEC streams. - public var maxBitrate: Swift.Int? - /// The maximum latency in milliseconds. This parameter applies only to RIST-based, Zixi-based, and Fujitsu-based streams. - public var maxLatency: Swift.Int? - /// The size of the buffer (in milliseconds) to use to sync incoming source data. - public var maxSyncBuffer: Swift.Int? - /// The minimum latency in milliseconds for SRT-based streams. In streams that use the SRT protocol, this value that you set on your MediaConnect source or output represents the minimal potential latency of that connection. The latency of the stream is set to the highest number between the sender’s minimum latency and the receiver’s minimum latency. - public var minLatency: Swift.Int? - /// The protocol that is used by the source or output. - /// This member is required. - public var `protocol`: MediaConnectClientTypes.ModelProtocol? - /// The remote ID for the Zixi-pull stream. - public var remoteId: Swift.String? - /// The port that the flow uses to send outbound requests to initiate connection with the sender. - public var senderControlPort: Swift.Int? - /// The IP address that the flow communicates with to initiate connection with the sender. - public var senderIpAddress: Swift.String? - /// The smoothing latency in milliseconds for RIST, RTP, and RTP-FEC streams. - public var smoothingLatency: Swift.Int? - /// Source IP or domain name for SRT-caller protocol. - public var sourceListenerAddress: Swift.String? - /// Source port for SRT-caller protocol. - public var sourceListenerPort: Swift.Int? - /// The stream ID that you want to use for this transport. This parameter applies only to Zixi-based streams. - public var streamId: Swift.String? +public enum UpdateBridgeSourceOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case conflictException(ConflictException) + case forbiddenException(ForbiddenException) + case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) +} - public init ( - cidrAllowList: [Swift.String]? = nil, - maxBitrate: Swift.Int? = nil, - maxLatency: Swift.Int? = nil, - maxSyncBuffer: Swift.Int? = nil, - minLatency: Swift.Int? = nil, - `protocol`: MediaConnectClientTypes.ModelProtocol? = nil, - remoteId: Swift.String? = nil, - senderControlPort: Swift.Int? = nil, - senderIpAddress: Swift.String? = nil, - smoothingLatency: Swift.Int? = nil, - sourceListenerAddress: Swift.String? = nil, - sourceListenerPort: Swift.Int? = nil, - streamId: Swift.String? = nil - ) - { - self.cidrAllowList = cidrAllowList - self.maxBitrate = maxBitrate - self.maxLatency = maxLatency - self.maxSyncBuffer = maxSyncBuffer - self.minLatency = minLatency - self.`protocol` = `protocol` - self.remoteId = remoteId - self.senderControlPort = senderControlPort - self.senderIpAddress = senderIpAddress - self.smoothingLatency = smoothingLatency - self.sourceListenerAddress = sourceListenerAddress - self.sourceListenerPort = sourceListenerPort - self.streamId = streamId +extension UpdateBridgeSourceOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: UpdateBridgeSourceOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.bridgeArn = output.bridgeArn + self.source = output.source + } else { + self.bridgeArn = nil + self.source = nil } } +} + +public struct UpdateBridgeSourceOutputResponse: Swift.Equatable { + /// The Amazon Resource Number (ARN) of the bridge. + public var bridgeArn: Swift.String? + /// The bridge's source. + public var source: MediaConnectClientTypes.BridgeSource? + + public init ( + bridgeArn: Swift.String? = nil, + source: MediaConnectClientTypes.BridgeSource? = nil + ) + { + self.bridgeArn = bridgeArn + self.source = source + } +} + +struct UpdateBridgeSourceOutputResponseBody: Swift.Equatable { + let bridgeArn: Swift.String? + let source: MediaConnectClientTypes.BridgeSource? +} + +extension UpdateBridgeSourceOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case bridgeArn = "bridgeArn" + case source = "source" + } + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let bridgeArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .bridgeArn) + bridgeArn = bridgeArnDecoded + let sourceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.BridgeSource.self, forKey: .source) + source = sourceDecoded + } } -extension UntagResourceInput: ClientRuntime.QueryItemProvider { - public var queryItems: [ClientRuntime.URLQueryItem] { - get throws { - var items = [ClientRuntime.URLQueryItem]() - guard let tagKeys = tagKeys else { - let message = "Creating a URL Query Item failed. tagKeys is required and must not be nil." - throw ClientRuntime.ClientError.queryItemCreationFailed(message) - } - tagKeys.forEach { queryItemValue in - let queryItem = ClientRuntime.URLQueryItem(name: "tagKeys".urlPercentEncoding(), value: Swift.String(queryItemValue).urlPercentEncoding()) - items.append(queryItem) - } - return items +extension UpdateBridgeStateInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case desiredState = "desiredState" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let desiredState = self.desiredState { + try encodeContainer.encode(desiredState.rawValue, forKey: .desiredState) } } } -extension UntagResourceInput: ClientRuntime.URLPathProvider { +extension UpdateBridgeStateInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let resourceArn = resourceArn else { + guard let bridgeArn = bridgeArn else { return nil } - return "/tags/\(resourceArn.urlPercentEncoding())" + return "/v1/bridges/\(bridgeArn.urlPercentEncoding())/state" } } -public struct UntagResourceInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) that identifies the AWS Elemental MediaConnect resource from which to delete tags. +/// A request to update the bridge state. +public struct UpdateBridgeStateInput: Swift.Equatable { + /// The ARN of the bridge that you want to update. /// This member is required. - public var resourceArn: Swift.String? - /// The keys of the tags to be removed. + public var bridgeArn: Swift.String? /// This member is required. - public var tagKeys: [Swift.String]? + public var desiredState: MediaConnectClientTypes.DesiredState? public init ( - resourceArn: Swift.String? = nil, - tagKeys: [Swift.String]? = nil + bridgeArn: Swift.String? = nil, + desiredState: MediaConnectClientTypes.DesiredState? = nil ) { - self.resourceArn = resourceArn - self.tagKeys = tagKeys + self.bridgeArn = bridgeArn + self.desiredState = desiredState } } -struct UntagResourceInputBody: Swift.Equatable { +struct UpdateBridgeStateInputBody: Swift.Equatable { + let desiredState: MediaConnectClientTypes.DesiredState? } -extension UntagResourceInputBody: Swift.Decodable { +extension UpdateBridgeStateInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case desiredState = "desiredState" + } public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let desiredStateDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.DesiredState.self, forKey: .desiredState) + desiredState = desiredStateDecoded } } -extension UntagResourceOutputError: ClientRuntime.HttpResponseBinding { +extension UpdateBridgeStateOutputError: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) @@ -8046,32 +12994,115 @@ extension UntagResourceOutputError: ClientRuntime.HttpResponseBinding { } } -extension UntagResourceOutputError { +extension UpdateBridgeStateOutputError { public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { switch errorType { case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ConflictException" : self = .conflictException(try ConflictException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) } } } -public enum UntagResourceOutputError: Swift.Error, Swift.Equatable { +public enum UpdateBridgeStateOutputError: Swift.Error, Swift.Equatable { case badRequestException(BadRequestException) + case conflictException(ConflictException) + case forbiddenException(ForbiddenException) case internalServerErrorException(InternalServerErrorException) case notFoundException(NotFoundException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) case unknown(UnknownAWSHttpServiceError) } -extension UntagResourceOutputResponse: ClientRuntime.HttpResponseBinding { +extension UpdateBridgeStateOutputResponse: ClientRuntime.HttpResponseBinding { public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: UpdateBridgeStateOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.bridgeArn = output.bridgeArn + self.desiredState = output.desiredState + } else { + self.bridgeArn = nil + self.desiredState = nil + } } } -public struct UntagResourceOutputResponse: Swift.Equatable { +public struct UpdateBridgeStateOutputResponse: Swift.Equatable { + /// The Amazon Resource Number (ARN) of the bridge. + public var bridgeArn: Swift.String? + /// The state of the bridge. ACTIVE or STANDBY. + public var desiredState: MediaConnectClientTypes.DesiredState? + + public init ( + bridgeArn: Swift.String? = nil, + desiredState: MediaConnectClientTypes.DesiredState? = nil + ) + { + self.bridgeArn = bridgeArn + self.desiredState = desiredState + } +} + +struct UpdateBridgeStateOutputResponseBody: Swift.Equatable { + let bridgeArn: Swift.String? + let desiredState: MediaConnectClientTypes.DesiredState? +} + +extension UpdateBridgeStateOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case bridgeArn = "bridgeArn" + case desiredState = "desiredState" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let bridgeArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .bridgeArn) + bridgeArn = bridgeArnDecoded + let desiredStateDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.DesiredState.self, forKey: .desiredState) + desiredState = desiredStateDecoded + } +} + +extension MediaConnectClientTypes.UpdateEgressGatewayBridgeRequest: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case maxBitrate = "maxBitrate" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let maxBitrate = self.maxBitrate { + try encodeContainer.encode(maxBitrate, forKey: .maxBitrate) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let maxBitrateDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxBitrate) + maxBitrate = maxBitrateDecoded + } +} + +extension MediaConnectClientTypes { + public struct UpdateEgressGatewayBridgeRequest: Swift.Equatable { + /// Update an existing egress-type bridge. + public var maxBitrate: Swift.Int? + + public init ( + maxBitrate: Swift.Int? = nil + ) + { + self.maxBitrate = maxBitrate + } + } - public init () { } } extension MediaConnectClientTypes.UpdateEncryption: Swift.Codable { @@ -8297,7 +13328,7 @@ extension UpdateFlowEntitlementInput: ClientRuntime.URLPathProvider { public struct UpdateFlowEntitlementInput: Swift.Equatable { /// A description of the entitlement. This description appears only on the AWS Elemental MediaConnect console and will not be seen by the subscriber or end user. public var description: Swift.String? - /// The type of encryption that will be used on the output associated with this entitlement. + /// The type of encryption that will be used on the output associated with this entitlement. Allowable encryption types: static-key, speke. public var encryption: MediaConnectClientTypes.UpdateEncryption? /// The ARN of the entitlement that you want to update. /// This member is required. @@ -8838,7 +13869,7 @@ public struct UpdateFlowOutputInput: Swift.Equatable { public var description: Swift.String? /// The IP address where you want to send the output. public var destination: Swift.String? - /// The type of key used for the encryption. If no keyType is provided, the service will use the default setting (static-key). + /// The type of key used for the encryption. If no keyType is provided, the service will use the default setting (static-key). Allowable encryption types: static-key. public var encryption: MediaConnectClientTypes.UpdateEncryption? /// The flow that is associated with the output that you want to update. /// This member is required. @@ -8864,7 +13895,7 @@ public struct UpdateFlowOutputInput: Swift.Equatable { public var senderIpAddress: Swift.String? /// The smoothing latency in milliseconds for RIST, RTP, and RTP-FEC streams. public var smoothingLatency: Swift.Int? - /// The stream ID that you want to use for this transport. This parameter applies only to Zixi-based streams. + /// The stream ID that you want to use for this transport. This parameter applies only to Zixi and SRT caller-based streams. public var streamId: Swift.String? /// The name of the VPC interface attachment to use for this output. public var vpcInterfaceAttachment: MediaConnectClientTypes.VpcInterfaceAttachment? @@ -9128,6 +14159,7 @@ extension UpdateFlowSourceInput: Swift.Encodable { case decryption = "decryption" case description = "description" case entitlementArn = "entitlementArn" + case gatewayBridgeSource = "gatewayBridgeSource" case ingestPort = "ingestPort" case maxBitrate = "maxBitrate" case maxLatency = "maxLatency" @@ -9155,6 +14187,9 @@ extension UpdateFlowSourceInput: Swift.Encodable { if let entitlementArn = self.entitlementArn { try encodeContainer.encode(entitlementArn, forKey: .entitlementArn) } + if let gatewayBridgeSource = self.gatewayBridgeSource { + try encodeContainer.encode(gatewayBridgeSource, forKey: .gatewayBridgeSource) + } if let ingestPort = self.ingestPort { try encodeContainer.encode(ingestPort, forKey: .ingestPort) } @@ -9217,7 +14252,7 @@ extension UpdateFlowSourceInput: ClientRuntime.URLPathProvider { /// A request to update the source of a flow. public struct UpdateFlowSourceInput: Swift.Equatable { - /// The type of encryption used on the content ingested from this source. + /// The type of encryption used on the content ingested from this source. Allowable encryption types: static-key. public var decryption: MediaConnectClientTypes.UpdateEncryption? /// A description for the source. This value is not used or seen outside of the current AWS Elemental MediaConnect account. public var description: Swift.String? @@ -9226,9 +14261,11 @@ public struct UpdateFlowSourceInput: Swift.Equatable { /// The flow that is associated with the source that you want to update. /// This member is required. public var flowArn: Swift.String? + /// The source configuration for cloud flows receiving a stream from a bridge. + public var gatewayBridgeSource: MediaConnectClientTypes.UpdateGatewayBridgeSourceRequest? /// The port that the flow will be listening on for incoming content. public var ingestPort: Swift.Int? - /// The smoothing max bitrate for RIST, RTP, and RTP-FEC streams. + /// The smoothing max bitrate (in bps) for RIST, RTP, and RTP-FEC streams. public var maxBitrate: Swift.Int? /// The maximum latency in milliseconds. This parameter applies only to RIST-based, Zixi-based, and Fujitsu-based streams. public var maxLatency: Swift.Int? @@ -9251,7 +14288,7 @@ public struct UpdateFlowSourceInput: Swift.Equatable { public var sourceListenerAddress: Swift.String? /// Source port for SRT-caller protocol. public var sourceListenerPort: Swift.Int? - /// The stream ID that you want to use for this transport. This parameter applies only to Zixi-based streams. + /// The stream ID that you want to use for this transport. This parameter applies only to Zixi and SRT caller-based streams. public var streamId: Swift.String? /// The name of the VPC interface to use for this source. public var vpcInterfaceName: Swift.String? @@ -9263,6 +14300,7 @@ public struct UpdateFlowSourceInput: Swift.Equatable { description: Swift.String? = nil, entitlementArn: Swift.String? = nil, flowArn: Swift.String? = nil, + gatewayBridgeSource: MediaConnectClientTypes.UpdateGatewayBridgeSourceRequest? = nil, ingestPort: Swift.Int? = nil, maxBitrate: Swift.Int? = nil, maxLatency: Swift.Int? = nil, @@ -9284,6 +14322,7 @@ public struct UpdateFlowSourceInput: Swift.Equatable { self.description = description self.entitlementArn = entitlementArn self.flowArn = flowArn + self.gatewayBridgeSource = gatewayBridgeSource self.ingestPort = ingestPort self.maxBitrate = maxBitrate self.maxLatency = maxLatency @@ -9320,6 +14359,7 @@ struct UpdateFlowSourceInputBody: Swift.Equatable { let streamId: Swift.String? let vpcInterfaceName: Swift.String? let whitelistCidr: Swift.String? + let gatewayBridgeSource: MediaConnectClientTypes.UpdateGatewayBridgeSourceRequest? } extension UpdateFlowSourceInputBody: Swift.Decodable { @@ -9327,6 +14367,7 @@ extension UpdateFlowSourceInputBody: Swift.Decodable { case decryption = "decryption" case description = "description" case entitlementArn = "entitlementArn" + case gatewayBridgeSource = "gatewayBridgeSource" case ingestPort = "ingestPort" case maxBitrate = "maxBitrate" case maxLatency = "maxLatency" @@ -9388,6 +14429,8 @@ extension UpdateFlowSourceInputBody: Swift.Decodable { vpcInterfaceName = vpcInterfaceNameDecoded let whitelistCidrDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .whitelistCidr) whitelistCidr = whitelistCidrDecoded + let gatewayBridgeSourceDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.UpdateGatewayBridgeSourceRequest.self, forKey: .gatewayBridgeSource) + gatewayBridgeSource = gatewayBridgeSourceDecoded } } @@ -9474,6 +14517,236 @@ extension UpdateFlowSourceOutputResponseBody: Swift.Decodable { } } +extension MediaConnectClientTypes.UpdateGatewayBridgeSourceRequest: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case bridgeArn = "bridgeArn" + case vpcInterfaceAttachment = "vpcInterfaceAttachment" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let bridgeArn = self.bridgeArn { + try encodeContainer.encode(bridgeArn, forKey: .bridgeArn) + } + if let vpcInterfaceAttachment = self.vpcInterfaceAttachment { + try encodeContainer.encode(vpcInterfaceAttachment, forKey: .vpcInterfaceAttachment) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let bridgeArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .bridgeArn) + bridgeArn = bridgeArnDecoded + let vpcInterfaceAttachmentDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.VpcInterfaceAttachment.self, forKey: .vpcInterfaceAttachment) + vpcInterfaceAttachment = vpcInterfaceAttachmentDecoded + } +} + +extension MediaConnectClientTypes { + /// The source configuration for cloud flows receiving a stream from a bridge. + public struct UpdateGatewayBridgeSourceRequest: Swift.Equatable { + /// The ARN of the bridge feeding this flow. + public var bridgeArn: Swift.String? + /// The name of the VPC interface attachment to use for this bridge source. + public var vpcInterfaceAttachment: MediaConnectClientTypes.VpcInterfaceAttachment? + + public init ( + bridgeArn: Swift.String? = nil, + vpcInterfaceAttachment: MediaConnectClientTypes.VpcInterfaceAttachment? = nil + ) + { + self.bridgeArn = bridgeArn + self.vpcInterfaceAttachment = vpcInterfaceAttachment + } + } + +} + +extension UpdateGatewayInstanceInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case bridgePlacement = "bridgePlacement" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let bridgePlacement = self.bridgePlacement { + try encodeContainer.encode(bridgePlacement.rawValue, forKey: .bridgePlacement) + } + } +} + +extension UpdateGatewayInstanceInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let gatewayInstanceArn = gatewayInstanceArn else { + return nil + } + return "/v1/gateway-instances/\(gatewayInstanceArn.urlPercentEncoding())" + } +} + +/// A request to update gateway instance state. +public struct UpdateGatewayInstanceInput: Swift.Equatable { + /// The availability of the instance to host new bridges. The bridgePlacement property can be LOCKED or AVAILABLE. If it is LOCKED, no new bridges can be deployed to this instance. If it is AVAILABLE, new bridges can be added to this instance. + public var bridgePlacement: MediaConnectClientTypes.BridgePlacement? + /// The Amazon Resource Name (ARN) of the instance that you want to update. + /// This member is required. + public var gatewayInstanceArn: Swift.String? + + public init ( + bridgePlacement: MediaConnectClientTypes.BridgePlacement? = nil, + gatewayInstanceArn: Swift.String? = nil + ) + { + self.bridgePlacement = bridgePlacement + self.gatewayInstanceArn = gatewayInstanceArn + } +} + +struct UpdateGatewayInstanceInputBody: Swift.Equatable { + let bridgePlacement: MediaConnectClientTypes.BridgePlacement? +} + +extension UpdateGatewayInstanceInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case bridgePlacement = "bridgePlacement" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let bridgePlacementDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.BridgePlacement.self, forKey: .bridgePlacement) + bridgePlacement = bridgePlacementDecoded + } +} + +extension UpdateGatewayInstanceOutputError: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + let errorDetails = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.headers.value(for: X_AMZN_REQUEST_ID_HEADER) + try self.init(errorType: errorDetails.errorType, httpResponse: httpResponse, decoder: decoder, message: errorDetails.errorMessage, requestID: requestID) + } +} + +extension UpdateGatewayInstanceOutputError { + public init(errorType: Swift.String?, httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) throws { + switch errorType { + case "BadRequestException" : self = .badRequestException(try BadRequestException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ConflictException" : self = .conflictException(try ConflictException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ForbiddenException" : self = .forbiddenException(try ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "InternalServerErrorException" : self = .internalServerErrorException(try InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "NotFoundException" : self = .notFoundException(try NotFoundException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "ServiceUnavailableException" : self = .serviceUnavailableException(try ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "TooManyRequestsException" : self = .tooManyRequestsException(try TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + default : self = .unknown(UnknownAWSHttpServiceError(httpResponse: httpResponse, message: message, requestID: requestID, errorType: errorType)) + } + } +} + +public enum UpdateGatewayInstanceOutputError: Swift.Error, Swift.Equatable { + case badRequestException(BadRequestException) + case conflictException(ConflictException) + case forbiddenException(ForbiddenException) + case internalServerErrorException(InternalServerErrorException) + case notFoundException(NotFoundException) + case serviceUnavailableException(ServiceUnavailableException) + case tooManyRequestsException(TooManyRequestsException) + case unknown(UnknownAWSHttpServiceError) +} + +extension UpdateGatewayInstanceOutputResponse: ClientRuntime.HttpResponseBinding { + public init (httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) throws { + if case .stream(let reader) = httpResponse.body, + let responseDecoder = decoder { + let data = reader.toBytes().getData() + let output: UpdateGatewayInstanceOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.bridgePlacement = output.bridgePlacement + self.gatewayInstanceArn = output.gatewayInstanceArn + } else { + self.bridgePlacement = nil + self.gatewayInstanceArn = nil + } + } +} + +public struct UpdateGatewayInstanceOutputResponse: Swift.Equatable { + /// The availability of the instance to host new bridges. The bridgePlacement property can be LOCKED or AVAILABLE. If it is LOCKED, no new bridges can be deployed to this instance. If it is AVAILABLE, new bridges can be added to this instance. + public var bridgePlacement: MediaConnectClientTypes.BridgePlacement? + /// The Amazon Resource Name (ARN) of the instance. + public var gatewayInstanceArn: Swift.String? + + public init ( + bridgePlacement: MediaConnectClientTypes.BridgePlacement? = nil, + gatewayInstanceArn: Swift.String? = nil + ) + { + self.bridgePlacement = bridgePlacement + self.gatewayInstanceArn = gatewayInstanceArn + } +} + +struct UpdateGatewayInstanceOutputResponseBody: Swift.Equatable { + let bridgePlacement: MediaConnectClientTypes.BridgePlacement? + let gatewayInstanceArn: Swift.String? +} + +extension UpdateGatewayInstanceOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case bridgePlacement = "bridgePlacement" + case gatewayInstanceArn = "gatewayInstanceArn" + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let bridgePlacementDecoded = try containerValues.decodeIfPresent(MediaConnectClientTypes.BridgePlacement.self, forKey: .bridgePlacement) + bridgePlacement = bridgePlacementDecoded + let gatewayInstanceArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .gatewayInstanceArn) + gatewayInstanceArn = gatewayInstanceArnDecoded + } +} + +extension MediaConnectClientTypes.UpdateIngressGatewayBridgeRequest: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case maxBitrate = "maxBitrate" + case maxOutputs = "maxOutputs" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let maxBitrate = self.maxBitrate { + try encodeContainer.encode(maxBitrate, forKey: .maxBitrate) + } + if let maxOutputs = self.maxOutputs { + try encodeContainer.encode(maxOutputs, forKey: .maxOutputs) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let maxBitrateDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxBitrate) + maxBitrate = maxBitrateDecoded + let maxOutputsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxOutputs) + maxOutputs = maxOutputsDecoded + } +} + +extension MediaConnectClientTypes { + public struct UpdateIngressGatewayBridgeRequest: Swift.Equatable { + /// The maximum expected bitrate (in bps). + public var maxBitrate: Swift.Int? + /// The maximum number of expected outputs. + public var maxOutputs: Swift.Int? + + public init ( + maxBitrate: Swift.Int? = nil, + maxOutputs: Swift.Int? = nil + ) + { + self.maxBitrate = maxBitrate + self.maxOutputs = maxOutputs + } + } + +} + extension MediaConnectClientTypes.UpdateMaintenance: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case maintenanceDay = "maintenanceDay" @@ -9664,9 +14937,9 @@ extension MediaConnectClientTypes.VpcInterfaceAttachment: Swift.Codable { } extension MediaConnectClientTypes { - /// The settings for attaching a VPC interface to an output. + /// The settings for attaching a VPC interface to an resource. public struct VpcInterfaceAttachment: Swift.Equatable { - /// The name of the VPC interface to use for this output. + /// The name of the VPC interface to use for this resource. public var vpcInterfaceName: Swift.String? public init ( diff --git a/Sources/Services/AWSMemoryDB/EndpointResolver.swift b/Sources/Services/AWSMemoryDB/EndpointResolver.swift index cd6283caa33..ffef218c2b2 100644 --- a/Sources/Services/AWSMemoryDB/EndpointResolver.swift +++ b/Sources/Services/AWSMemoryDB/EndpointResolver.swift @@ -35,7 +35,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://memory-db-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://memory-db-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://memory-db.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"fips\"]}],\"endpoint\":{\"url\":\"https://memory-db-fips.us-west-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-west-1\",\"signingName\":\"memorydb\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://memory-db.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" + private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://memory-db-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://memory-db-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://memory-db.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"fips\"]}],\"endpoint\":{\"url\":\"https://memory-db-fips.us-west-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"memorydb\",\"signingRegion\":\"us-west-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://memory-db.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSMigrationHubRefactorSpaces/MigrationHubRefactorSpacesClient.swift b/Sources/Services/AWSMigrationHubRefactorSpaces/MigrationHubRefactorSpacesClient.swift index 74682b35c2e..1d071a5cb6c 100644 --- a/Sources/Services/AWSMigrationHubRefactorSpaces/MigrationHubRefactorSpacesClient.swift +++ b/Sources/Services/AWSMigrationHubRefactorSpaces/MigrationHubRefactorSpacesClient.swift @@ -130,7 +130,7 @@ public struct MigrationHubRefactorSpacesClientLogHandlerFactory: ClientRuntime.S } extension MigrationHubRefactorSpacesClient: MigrationHubRefactorSpacesClientProtocol { - /// Creates an Amazon Web Services Migration Hub Refactor Spaces application. The account that owns the environment also owns the applications created inside the environment, regardless of the account that creates the application. Refactor Spaces provisions an Amazon API Gateway, API Gateway VPC link, and Network Load Balancer for the application proxy inside your account. + /// Creates an Amazon Web Services Migration Hub Refactor Spaces application. The account that owns the environment also owns the applications created inside the environment, regardless of the account that creates the application. Refactor Spaces provisions an Amazon API Gateway, API Gateway VPC link, and Network Load Balancer for the application proxy inside your account. In environments created with a [CreateEnvironment:NetworkFabricType](https://docs.aws.amazon.com/migrationhub-refactor-spaces/latest/APIReference/API_CreateEnvironment.html#migrationhubrefactorspaces-CreateEnvironment-request-NetworkFabricType) of NONE you need to configure [ VPC to VPC connectivity](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/amazon-vpc-to-amazon-vpc-connectivity-options.html) between your service VPC and the application proxy VPC to route traffic through the application proxy to a service with a private URL endpoint. For more information, see [ Create an application](https://docs.aws.amazon.com/migrationhub-refactor-spaces/latest/userguide/getting-started-create-application.html) in the Refactor Spaces User Guide. public func createApplication(input: CreateApplicationInput) async throws -> CreateApplicationOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -173,7 +173,7 @@ extension MigrationHubRefactorSpacesClient: MigrationHubRefactorSpacesClientProt return result } - /// Creates an Amazon Web Services Migration Hub Refactor Spaces environment. The caller owns the environment resource, and all Refactor Spaces applications, services, and routes created within the environment. They are referred to as the environment owner. The environment owner has cross-account visibility and control of Refactor Spaces resources that are added to the environment by other accounts that the environment is shared with. When creating an environment with a network fabric type of TRANSIT_GATEWAY, Refactor Spaces provisions a transit gateway in your account. + /// Creates an Amazon Web Services Migration Hub Refactor Spaces environment. The caller owns the environment resource, and all Refactor Spaces applications, services, and routes created within the environment. They are referred to as the environment owner. The environment owner has cross-account visibility and control of Refactor Spaces resources that are added to the environment by other accounts that the environment is shared with. When creating an environment with a [CreateEnvironment:NetworkFabricType](https://docs.aws.amazon.com/migrationhub-refactor-spaces/latest/APIReference/API_CreateEnvironment.html#migrationhubrefactorspaces-CreateEnvironment-request-NetworkFabricType) of TRANSIT_GATEWAY, Refactor Spaces provisions a transit gateway to enable services in VPCs to communicate directly across accounts. If [CreateEnvironment:NetworkFabricType](https://docs.aws.amazon.com/migrationhub-refactor-spaces/latest/APIReference/API_CreateEnvironment.html#migrationhubrefactorspaces-CreateEnvironment-request-NetworkFabricType) is NONE, Refactor Spaces does not create a transit gateway and you must use your network infrastructure to route traffic to services with private URL endpoints. public func createEnvironment(input: CreateEnvironmentInput) async throws -> CreateEnvironmentOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -218,14 +218,12 @@ extension MigrationHubRefactorSpacesClient: MigrationHubRefactorSpacesClientProt /// Creates an Amazon Web Services Migration Hub Refactor Spaces route. The account owner of the service resource is always the environment owner, regardless of which account creates the route. Routes target a service in the application. If an application does not have any routes, then the first route must be created as a DEFAULTRouteType. When created, the default route defaults to an active state so state is not a required input. However, like all other state values the state of the default route can be updated after creation, but only when all other routes are also inactive. Conversely, no route can be active without the default route also being active. When you create a route, Refactor Spaces configures the Amazon API Gateway to send traffic to the target service as follows: /// - /// * If the service has a URL endpoint, and the endpoint resolves to a private IP address, Refactor Spaces routes traffic using the API Gateway VPC link. + /// * URL Endpoints If the service has a URL endpoint, and the endpoint resolves to a private IP address, Refactor Spaces routes traffic using the API Gateway VPC link. If a service endpoint resolves to a public IP address, Refactor Spaces routes traffic over the public internet. Services can have HTTP or HTTPS URL endpoints. For HTTPS URLs, publicly-signed certificates are supported. Private Certificate Authorities (CAs) are permitted only if the CA's domain is also publicly resolvable. Refactor Spaces automatically resolves the public Domain Name System (DNS) names that are set in CreateService:UrlEndpoint when you create a service. The DNS names resolve when the DNS time-to-live (TTL) expires, or every 60 seconds for TTLs less than 60 seconds. This periodic DNS resolution ensures that the route configuration remains up-to-date. One-time health check A one-time health check is performed on the service when either the route is updated from inactive to active, or when it is created with an active state. If the health check fails, the route transitions the route state to FAILED, an error code of SERVICE_ENDPOINT_HEALTH_CHECK_FAILURE is provided, and no traffic is sent to the service. For private URLs, a target group is created on the Network Load Balancer and the load balancer target group runs default target health checks. By default, the health check is run against the service endpoint URL. Optionally, the health check can be performed against a different protocol, port, and/or path using the [CreateService:UrlEndpoint](https://docs.aws.amazon.com/migrationhub-refactor-spaces/latest/APIReference/API_CreateService.html#migrationhubrefactorspaces-CreateService-request-UrlEndpoint) parameter. All other health check settings for the load balancer use the default values described in the [Health checks for your target groups](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html) in the Elastic Load Balancing guide. The health check is considered successful if at least one target within the target group transitions to a healthy state. /// - /// * If the service has a URL endpoint, and the endpoint resolves to a public IP address, Refactor Spaces routes traffic over the public internet. + /// * Lambda function endpoints If the service has an Lambda function endpoint, then Refactor Spaces configures the Lambda function's resource policy to allow the application's API Gateway to invoke the function. The Lambda function state is checked. If the function is not active, the function configuration is updated so that Lambda resources are provisioned. If the Lambda state is Failed, then the route creation fails. For more information, see the [GetFunctionConfiguration's State response parameter](https://docs.aws.amazon.com/lambda/latest/dg/API_GetFunctionConfiguration.html#SSS-GetFunctionConfiguration-response-State) in the Lambda Developer Guide. A check is performed to determine that a Lambda function with the specified ARN exists. If it does not exist, the health check fails. For public URLs, a connection is opened to the public endpoint. If the URL is not reachable, the health check fails. /// - /// * If the service has an Lambda function endpoint, then Refactor Spaces configures the Lambda function's resource policy to allow the application's API Gateway to invoke the function. /// - /// - /// A one-time health check is performed on the service when either the route is updated from inactive to active, or when it is created with an active state. If the health check fails, the route transitions the route state to FAILED, an error code of SERVICE_ENDPOINT_HEALTH_CHECK_FAILURE is provided, and no traffic is sent to the service. For Lambda functions, the Lambda function state is checked. If the function is not active, the function configuration is updated so that Lambda resources are provisioned. If the Lambda state is Failed, then the route creation fails. For more information, see the [GetFunctionConfiguration's State response parameter](https://docs.aws.amazon.com/lambda/latest/dg/API_GetFunctionConfiguration.html#SSS-GetFunctionConfiguration-response-State) in the Lambda Developer Guide. For Lambda endpoints, a check is performed to determine that a Lambda function with the specified ARN exists. If it does not exist, the health check fails. For public URLs, a connection is opened to the public endpoint. If the URL is not reachable, the health check fails. Refactor Spaces automatically resolves the public Domain Name System (DNS) names that are set in [CreateServiceRequest$UrlEndpoint] when you create a service. The DNS names resolve when the DNS time-to-live (TTL) expires, or every 60 seconds for TTLs less than 60 seconds. This periodic DNS resolution ensures that the route configuration remains up-to-date. For private URLS, a target group is created on the Elastic Load Balancing and the target group health check is run. The HealthCheckProtocol, HealthCheckPort, and HealthCheckPath are the same protocol, port, and path specified in the URL or health URL, if used. All other settings use the default values, as described in [Health checks for your target groups](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html). The health check is considered successful if at least one target within the target group transitions to a healthy state. Services can have HTTP or HTTPS URL endpoints. For HTTPS URLs, publicly-signed certificates are supported. Private Certificate Authorities (CAs) are permitted only if the CA's domain is also publicly resolvable. + /// Environments without a network bridge When you create environments without a network bridge ([CreateEnvironment:NetworkFabricType](https://docs.aws.amazon.com/migrationhub-refactor-spaces/latest/APIReference/API_CreateEnvironment.html#migrationhubrefactorspaces-CreateEnvironment-request-NetworkFabricType) is NONE) and you use your own networking infrastructure, you need to configure [VPC to VPC connectivity](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/amazon-vpc-to-amazon-vpc-connectivity-options.html) between your network and the application proxy VPC. Route creation from the application proxy to service endpoints will fail if your network is not configured to connect to the application proxy VPC. For more information, see [ Create a route](https://docs.aws.amazon.com/migrationhub-refactor-spaces/latest/userguide/getting-started-create-role.html) in the Refactor Spaces User Guide. public func createRoute(input: CreateRouteInput) async throws -> CreateRouteOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSMigrationHubRefactorSpaces/MigrationHubRefactorSpacesClientProtocol.swift b/Sources/Services/AWSMigrationHubRefactorSpaces/MigrationHubRefactorSpacesClientProtocol.swift index 599ebb8b7fa..474deb972b7 100644 --- a/Sources/Services/AWSMigrationHubRefactorSpaces/MigrationHubRefactorSpacesClientProtocol.swift +++ b/Sources/Services/AWSMigrationHubRefactorSpaces/MigrationHubRefactorSpacesClientProtocol.swift @@ -5,20 +5,18 @@ import ClientRuntime /// Amazon Web Services Migration Hub Refactor Spaces This API reference provides descriptions, syntax, and other details about each of the actions and data types for Amazon Web Services Migration Hub Refactor Spaces (Refactor Spaces). The topic for each action shows the API request parameters and the response. Alternatively, you can use one of the Amazon Web Services SDKs to access an API that is tailored to the programming language or platform that you're using. For more information, see [Amazon Web Services SDKs](https://aws.amazon.com/tools/#SDKs). To share Refactor Spaces environments with other Amazon Web Services accounts or with Organizations and their OUs, use Resource Access Manager's CreateResourceShare API. See [CreateResourceShare](https://docs.aws.amazon.com/ram/latest/APIReference/API_CreateResourceShare.html) in the Amazon Web Services RAM API Reference. public protocol MigrationHubRefactorSpacesClientProtocol { - /// Creates an Amazon Web Services Migration Hub Refactor Spaces application. The account that owns the environment also owns the applications created inside the environment, regardless of the account that creates the application. Refactor Spaces provisions an Amazon API Gateway, API Gateway VPC link, and Network Load Balancer for the application proxy inside your account. + /// Creates an Amazon Web Services Migration Hub Refactor Spaces application. The account that owns the environment also owns the applications created inside the environment, regardless of the account that creates the application. Refactor Spaces provisions an Amazon API Gateway, API Gateway VPC link, and Network Load Balancer for the application proxy inside your account. In environments created with a [CreateEnvironment:NetworkFabricType](https://docs.aws.amazon.com/migrationhub-refactor-spaces/latest/APIReference/API_CreateEnvironment.html#migrationhubrefactorspaces-CreateEnvironment-request-NetworkFabricType) of NONE you need to configure [ VPC to VPC connectivity](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/amazon-vpc-to-amazon-vpc-connectivity-options.html) between your service VPC and the application proxy VPC to route traffic through the application proxy to a service with a private URL endpoint. For more information, see [ Create an application](https://docs.aws.amazon.com/migrationhub-refactor-spaces/latest/userguide/getting-started-create-application.html) in the Refactor Spaces User Guide. func createApplication(input: CreateApplicationInput) async throws -> CreateApplicationOutputResponse - /// Creates an Amazon Web Services Migration Hub Refactor Spaces environment. The caller owns the environment resource, and all Refactor Spaces applications, services, and routes created within the environment. They are referred to as the environment owner. The environment owner has cross-account visibility and control of Refactor Spaces resources that are added to the environment by other accounts that the environment is shared with. When creating an environment with a network fabric type of TRANSIT_GATEWAY, Refactor Spaces provisions a transit gateway in your account. + /// Creates an Amazon Web Services Migration Hub Refactor Spaces environment. The caller owns the environment resource, and all Refactor Spaces applications, services, and routes created within the environment. They are referred to as the environment owner. The environment owner has cross-account visibility and control of Refactor Spaces resources that are added to the environment by other accounts that the environment is shared with. When creating an environment with a [CreateEnvironment:NetworkFabricType](https://docs.aws.amazon.com/migrationhub-refactor-spaces/latest/APIReference/API_CreateEnvironment.html#migrationhubrefactorspaces-CreateEnvironment-request-NetworkFabricType) of TRANSIT_GATEWAY, Refactor Spaces provisions a transit gateway to enable services in VPCs to communicate directly across accounts. If [CreateEnvironment:NetworkFabricType](https://docs.aws.amazon.com/migrationhub-refactor-spaces/latest/APIReference/API_CreateEnvironment.html#migrationhubrefactorspaces-CreateEnvironment-request-NetworkFabricType) is NONE, Refactor Spaces does not create a transit gateway and you must use your network infrastructure to route traffic to services with private URL endpoints. func createEnvironment(input: CreateEnvironmentInput) async throws -> CreateEnvironmentOutputResponse /// Creates an Amazon Web Services Migration Hub Refactor Spaces route. The account owner of the service resource is always the environment owner, regardless of which account creates the route. Routes target a service in the application. If an application does not have any routes, then the first route must be created as a DEFAULTRouteType. When created, the default route defaults to an active state so state is not a required input. However, like all other state values the state of the default route can be updated after creation, but only when all other routes are also inactive. Conversely, no route can be active without the default route also being active. When you create a route, Refactor Spaces configures the Amazon API Gateway to send traffic to the target service as follows: /// - /// * If the service has a URL endpoint, and the endpoint resolves to a private IP address, Refactor Spaces routes traffic using the API Gateway VPC link. + /// * URL Endpoints If the service has a URL endpoint, and the endpoint resolves to a private IP address, Refactor Spaces routes traffic using the API Gateway VPC link. If a service endpoint resolves to a public IP address, Refactor Spaces routes traffic over the public internet. Services can have HTTP or HTTPS URL endpoints. For HTTPS URLs, publicly-signed certificates are supported. Private Certificate Authorities (CAs) are permitted only if the CA's domain is also publicly resolvable. Refactor Spaces automatically resolves the public Domain Name System (DNS) names that are set in CreateService:UrlEndpoint when you create a service. The DNS names resolve when the DNS time-to-live (TTL) expires, or every 60 seconds for TTLs less than 60 seconds. This periodic DNS resolution ensures that the route configuration remains up-to-date. One-time health check A one-time health check is performed on the service when either the route is updated from inactive to active, or when it is created with an active state. If the health check fails, the route transitions the route state to FAILED, an error code of SERVICE_ENDPOINT_HEALTH_CHECK_FAILURE is provided, and no traffic is sent to the service. For private URLs, a target group is created on the Network Load Balancer and the load balancer target group runs default target health checks. By default, the health check is run against the service endpoint URL. Optionally, the health check can be performed against a different protocol, port, and/or path using the [CreateService:UrlEndpoint](https://docs.aws.amazon.com/migrationhub-refactor-spaces/latest/APIReference/API_CreateService.html#migrationhubrefactorspaces-CreateService-request-UrlEndpoint) parameter. All other health check settings for the load balancer use the default values described in the [Health checks for your target groups](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html) in the Elastic Load Balancing guide. The health check is considered successful if at least one target within the target group transitions to a healthy state. /// - /// * If the service has a URL endpoint, and the endpoint resolves to a public IP address, Refactor Spaces routes traffic over the public internet. + /// * Lambda function endpoints If the service has an Lambda function endpoint, then Refactor Spaces configures the Lambda function's resource policy to allow the application's API Gateway to invoke the function. The Lambda function state is checked. If the function is not active, the function configuration is updated so that Lambda resources are provisioned. If the Lambda state is Failed, then the route creation fails. For more information, see the [GetFunctionConfiguration's State response parameter](https://docs.aws.amazon.com/lambda/latest/dg/API_GetFunctionConfiguration.html#SSS-GetFunctionConfiguration-response-State) in the Lambda Developer Guide. A check is performed to determine that a Lambda function with the specified ARN exists. If it does not exist, the health check fails. For public URLs, a connection is opened to the public endpoint. If the URL is not reachable, the health check fails. /// - /// * If the service has an Lambda function endpoint, then Refactor Spaces configures the Lambda function's resource policy to allow the application's API Gateway to invoke the function. /// - /// - /// A one-time health check is performed on the service when either the route is updated from inactive to active, or when it is created with an active state. If the health check fails, the route transitions the route state to FAILED, an error code of SERVICE_ENDPOINT_HEALTH_CHECK_FAILURE is provided, and no traffic is sent to the service. For Lambda functions, the Lambda function state is checked. If the function is not active, the function configuration is updated so that Lambda resources are provisioned. If the Lambda state is Failed, then the route creation fails. For more information, see the [GetFunctionConfiguration's State response parameter](https://docs.aws.amazon.com/lambda/latest/dg/API_GetFunctionConfiguration.html#SSS-GetFunctionConfiguration-response-State) in the Lambda Developer Guide. For Lambda endpoints, a check is performed to determine that a Lambda function with the specified ARN exists. If it does not exist, the health check fails. For public URLs, a connection is opened to the public endpoint. If the URL is not reachable, the health check fails. Refactor Spaces automatically resolves the public Domain Name System (DNS) names that are set in [CreateServiceRequest$UrlEndpoint] when you create a service. The DNS names resolve when the DNS time-to-live (TTL) expires, or every 60 seconds for TTLs less than 60 seconds. This periodic DNS resolution ensures that the route configuration remains up-to-date. For private URLS, a target group is created on the Elastic Load Balancing and the target group health check is run. The HealthCheckProtocol, HealthCheckPort, and HealthCheckPath are the same protocol, port, and path specified in the URL or health URL, if used. All other settings use the default values, as described in [Health checks for your target groups](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html). The health check is considered successful if at least one target within the target group transitions to a healthy state. Services can have HTTP or HTTPS URL endpoints. For HTTPS URLs, publicly-signed certificates are supported. Private Certificate Authorities (CAs) are permitted only if the CA's domain is also publicly resolvable. + /// Environments without a network bridge When you create environments without a network bridge ([CreateEnvironment:NetworkFabricType](https://docs.aws.amazon.com/migrationhub-refactor-spaces/latest/APIReference/API_CreateEnvironment.html#migrationhubrefactorspaces-CreateEnvironment-request-NetworkFabricType) is NONE) and you use your own networking infrastructure, you need to configure [VPC to VPC connectivity](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/amazon-vpc-to-amazon-vpc-connectivity-options.html) between your network and the application proxy VPC. Route creation from the application proxy to service endpoints will fail if your network is not configured to connect to the application proxy VPC. For more information, see [ Create a route](https://docs.aws.amazon.com/migrationhub-refactor-spaces/latest/userguide/getting-started-create-role.html) in the Refactor Spaces User Guide. func createRoute(input: CreateRouteInput) async throws -> CreateRouteOutputResponse /// Creates an Amazon Web Services Migration Hub Refactor Spaces service. The account owner of the service is always the environment owner, regardless of which account in the environment creates the service. Services have either a URL endpoint in a virtual private cloud (VPC), or a Lambda function endpoint. If an Amazon Web Services resource is launched in a service VPC, and you want it to be accessible to all of an environment’s services with VPCs and routes, apply the RefactorSpacesSecurityGroup to the resource. Alternatively, to add more cross-account constraints, apply your own security group. func createService(input: CreateServiceInput) async throws -> CreateServiceOutputResponse diff --git a/Sources/Services/AWSMigrationHubRefactorSpaces/models/Models.swift b/Sources/Services/AWSMigrationHubRefactorSpaces/models/Models.swift index 2151c878fda..518f82b0cd9 100644 --- a/Sources/Services/AWSMigrationHubRefactorSpaces/models/Models.swift +++ b/Sources/Services/AWSMigrationHubRefactorSpaces/models/Models.swift @@ -2930,7 +2930,7 @@ extension MigrationHubRefactorSpacesClientTypes { public var state: MigrationHubRefactorSpacesClientTypes.EnvironmentState? /// The tags assigned to the environment. public var tags: [Swift.String:Swift.String]? - /// The ID of the transit gateway set up by the environment. + /// The ID of the Transit Gateway set up by the environment. public var transitGatewayId: Swift.String? public init ( @@ -3692,7 +3692,7 @@ public struct GetEnvironmentOutputResponse: Swift.Equatable { public var state: MigrationHubRefactorSpacesClientTypes.EnvironmentState? /// The tags to assign to the environment. A tag is a label that you assign to an Amazon Web Services resource. Each tag consists of a key-value pair. public var tags: [Swift.String:Swift.String]? - /// The ID of the transit gateway set up by the environment. + /// The ID of the Transit Gateway set up by the environment, if applicable. public var transitGatewayId: Swift.String? public init ( diff --git a/Sources/Services/AWSNetworkManager/EndpointResolver.swift b/Sources/Services/AWSNetworkManager/EndpointResolver.swift index 641ef79ecbd..2814ba80a8a 100644 --- a/Sources/Services/AWSNetworkManager/EndpointResolver.swift +++ b/Sources/Services/AWSNetworkManager/EndpointResolver.swift @@ -35,7 +35,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://networkmanager.us-west-2.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-west-2\",\"signingName\":\"networkmanager\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-us-gov\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://networkmanager.us-gov-west-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-gov-west-1\",\"signingName\":\"networkmanager\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://networkmanager-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://networkmanager-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://networkmanager.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://networkmanager.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" + private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://networkmanager.us-west-2.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"networkmanager\",\"signingRegion\":\"us-west-2\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-us-gov\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://networkmanager.us-gov-west-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"networkmanager\",\"signingRegion\":\"us-gov-west-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://networkmanager-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://networkmanager-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://networkmanager.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://networkmanager.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSOrganizations/EndpointResolver.swift b/Sources/Services/AWSOrganizations/EndpointResolver.swift index 5e9728c499d..fdaa626eeaf 100644 --- a/Sources/Services/AWSOrganizations/EndpointResolver.swift +++ b/Sources/Services/AWSOrganizations/EndpointResolver.swift @@ -35,7 +35,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://organizations.us-east-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"organizations\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://organizations-fips.us-east-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"organizations\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-cn\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://organizations.cn-northwest-1.amazonaws.com.cn\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"cn-northwest-1\",\"signingName\":\"organizations\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-us-gov\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://organizations.us-gov-west-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-gov-west-1\",\"signingName\":\"organizations\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-us-gov\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://organizations.us-gov-west-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-gov-west-1\",\"signingName\":\"organizations\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://organizations-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://organizations-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://organizations.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://organizations.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" + private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://organizations.us-east-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"organizations\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://organizations-fips.us-east-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"organizations\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-cn\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://organizations.cn-northwest-1.amazonaws.com.cn\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"organizations\",\"signingRegion\":\"cn-northwest-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-us-gov\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://organizations.us-gov-west-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"organizations\",\"signingRegion\":\"us-gov-west-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-us-gov\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://organizations.us-gov-west-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"organizations\",\"signingRegion\":\"us-gov-west-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://organizations-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://organizations-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://organizations.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://organizations.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSRDS/models/Models.swift b/Sources/Services/AWSRDS/models/Models.swift index 880c7459dd6..2f5f414d473 100644 --- a/Sources/Services/AWSRDS/models/Models.swift +++ b/Sources/Services/AWSRDS/models/Models.swift @@ -36033,6 +36033,9 @@ extension ModifyDBClusterInput: Swift.Encodable { if let allocatedStorage = allocatedStorage { try container.encode(allocatedStorage, forKey: ClientRuntime.Key("AllocatedStorage")) } + if allowEngineModeChange != false { + try container.encode(allowEngineModeChange, forKey: ClientRuntime.Key("AllowEngineModeChange")) + } if allowMajorVersionUpgrade != false { try container.encode(allowMajorVersionUpgrade, forKey: ClientRuntime.Key("AllowMajorVersionUpgrade")) } @@ -36087,6 +36090,9 @@ extension ModifyDBClusterInput: Swift.Encodable { if let enablePerformanceInsights = enablePerformanceInsights { try container.encode(enablePerformanceInsights, forKey: ClientRuntime.Key("EnablePerformanceInsights")) } + if let engineMode = engineMode { + try container.encode(engineMode, forKey: ClientRuntime.Key("EngineMode")) + } if let engineVersion = engineVersion { try container.encode(engineVersion, forKey: ClientRuntime.Key("EngineVersion")) } @@ -36169,8 +36175,10 @@ extension ModifyDBClusterInput: ClientRuntime.URLPathProvider { /// public struct ModifyDBClusterInput: Swift.Equatable { - /// The amount of storage in gibibytes (GiB) to allocate to each DB instance in the Multi-AZ DB cluster. Type: Integer Valid for: Multi-AZ DB clusters only + /// The amount of storage in gibibytes (GiB) to allocate to each DB instance in the Multi-AZ DB cluster. Valid for: Multi-AZ DB clusters only public var allocatedStorage: Swift.Int? + /// A value that indicates whether engine mode changes from serverless to provisioned are allowed. Constraints: You must allow engine mode changes when specifying a different value for the EngineMode parameter from the DB cluster's current engine mode. Valid for: Aurora Serverless v1 DB clusters only + public var allowEngineModeChange: Swift.Bool /// A value that indicates whether major version upgrades are allowed. Constraints: You must allow major version upgrades when specifying a value for the EngineVersion parameter that is a different major version than the DB cluster's current version. Valid for: Aurora DB clusters only public var allowMajorVersionUpgrade: Swift.Bool /// A value that indicates whether the modifications in this request and any pending modifications are asynchronously applied as soon as possible, regardless of the PreferredMaintenanceWindow setting for the DB cluster. If this parameter is disabled, changes to the DB cluster are applied during the next maintenance window. Most modifications can be applied immediately or during the next scheduled maintenance window. Some modifications, such as turning on deletion protection and changing the master password, are applied immediately—regardless of when you choose to apply them. By default, this parameter is disabled. Valid for: Aurora DB clusters and Multi-AZ DB clusters @@ -36225,6 +36233,8 @@ public struct ModifyDBClusterInput: Swift.Equatable { public var enableIAMDatabaseAuthentication: Swift.Bool? /// A value that indicates whether to turn on Performance Insights for the DB cluster. For more information, see [ Using Amazon Performance Insights](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.html) in the Amazon RDS User Guide. Valid for: Multi-AZ DB clusters only public var enablePerformanceInsights: Swift.Bool? + /// The DB engine mode of the DB cluster, either provisioned or serverless. The DB engine mode can be modified only from serverless to provisioned. For more information, see [ CreateDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBCluster.html). Valid for: Aurora DB clusters only + public var engineMode: Swift.String? /// The version number of the database engine to which you want to upgrade. Changing this parameter results in an outage. The change is applied during the next maintenance window unless ApplyImmediately is enabled. If the cluster that you're modifying has one or more read replicas, all replicas must be running an engine version that's the same or later than the version you specify. To list all of the available engine versions for Aurora MySQL version 2 (5.7-compatible) and version 3 (MySQL 8.0-compatible), use the following command: aws rds describe-db-engine-versions --engine aurora-mysql --query "DBEngineVersions[].EngineVersion" To list all of the available engine versions for MySQL 5.6-compatible Aurora, use the following command: aws rds describe-db-engine-versions --engine aurora --query "DBEngineVersions[].EngineVersion" To list all of the available engine versions for Aurora PostgreSQL, use the following command: aws rds describe-db-engine-versions --engine aurora-postgresql --query "DBEngineVersions[].EngineVersion" To list all of the available engine versions for RDS for MySQL, use the following command: aws rds describe-db-engine-versions --engine mysql --query "DBEngineVersions[].EngineVersion" To list all of the available engine versions for RDS for PostgreSQL, use the following command: aws rds describe-db-engine-versions --engine postgres --query "DBEngineVersions[].EngineVersion" Valid for: Aurora DB clusters and Multi-AZ DB clusters public var engineVersion: Swift.String? /// The amount of Provisioned IOPS (input/output operations per second) to be initially allocated for each DB instance in the Multi-AZ DB cluster. For information about valid IOPS values, see [Amazon RDS Provisioned IOPS storage](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html#USER_PIOPS) in the Amazon RDS User Guide. Constraints: Must be a multiple between .5 and 50 of the storage amount for the DB cluster. Valid for: Multi-AZ DB clusters only @@ -36334,6 +36344,7 @@ public struct ModifyDBClusterInput: Swift.Equatable { public init ( allocatedStorage: Swift.Int? = nil, + allowEngineModeChange: Swift.Bool = false, allowMajorVersionUpgrade: Swift.Bool = false, applyImmediately: Swift.Bool = false, autoMinorVersionUpgrade: Swift.Bool? = nil, @@ -36352,6 +36363,7 @@ public struct ModifyDBClusterInput: Swift.Equatable { enableHttpEndpoint: Swift.Bool? = nil, enableIAMDatabaseAuthentication: Swift.Bool? = nil, enablePerformanceInsights: Swift.Bool? = nil, + engineMode: Swift.String? = nil, engineVersion: Swift.String? = nil, iops: Swift.Int? = nil, manageMasterUserPassword: Swift.Bool? = nil, @@ -36375,6 +36387,7 @@ public struct ModifyDBClusterInput: Swift.Equatable { ) { self.allocatedStorage = allocatedStorage + self.allowEngineModeChange = allowEngineModeChange self.allowMajorVersionUpgrade = allowMajorVersionUpgrade self.applyImmediately = applyImmediately self.autoMinorVersionUpgrade = autoMinorVersionUpgrade @@ -36393,6 +36406,7 @@ public struct ModifyDBClusterInput: Swift.Equatable { self.enableHttpEndpoint = enableHttpEndpoint self.enableIAMDatabaseAuthentication = enableIAMDatabaseAuthentication self.enablePerformanceInsights = enablePerformanceInsights + self.engineMode = engineMode self.engineVersion = engineVersion self.iops = iops self.manageMasterUserPassword = manageMasterUserPassword @@ -36456,11 +36470,14 @@ struct ModifyDBClusterInputBody: Swift.Equatable { let manageMasterUserPassword: Swift.Bool? let rotateMasterUserPassword: Swift.Bool? let masterUserSecretKmsKeyId: Swift.String? + let engineMode: Swift.String? + let allowEngineModeChange: Swift.Bool } extension ModifyDBClusterInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case allocatedStorage = "AllocatedStorage" + case allowEngineModeChange = "AllowEngineModeChange" case allowMajorVersionUpgrade = "AllowMajorVersionUpgrade" case applyImmediately = "ApplyImmediately" case autoMinorVersionUpgrade = "AutoMinorVersionUpgrade" @@ -36479,6 +36496,7 @@ extension ModifyDBClusterInputBody: Swift.Decodable { case enableHttpEndpoint = "EnableHttpEndpoint" case enableIAMDatabaseAuthentication = "EnableIAMDatabaseAuthentication" case enablePerformanceInsights = "EnablePerformanceInsights" + case engineMode = "EngineMode" case engineVersion = "EngineVersion" case iops = "Iops" case manageMasterUserPassword = "ManageMasterUserPassword" @@ -36598,6 +36616,10 @@ extension ModifyDBClusterInputBody: Swift.Decodable { rotateMasterUserPassword = rotateMasterUserPasswordDecoded let masterUserSecretKmsKeyIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .masterUserSecretKmsKeyId) masterUserSecretKmsKeyId = masterUserSecretKmsKeyIdDecoded + let engineModeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .engineMode) + engineMode = engineModeDecoded + let allowEngineModeChangeDecoded = try containerValues.decode(Swift.Bool.self, forKey: .allowEngineModeChange) + allowEngineModeChange = allowEngineModeChangeDecoded } } @@ -36614,6 +36636,7 @@ extension ModifyDBClusterOutputError { case "DBClusterAlreadyExistsFault" : self = .dBClusterAlreadyExistsFault(try DBClusterAlreadyExistsFault(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "DBClusterNotFoundFault" : self = .dBClusterNotFoundFault(try DBClusterNotFoundFault(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "DBClusterParameterGroupNotFound" : self = .dBClusterParameterGroupNotFoundFault(try DBClusterParameterGroupNotFoundFault(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) + case "DBInstanceAlreadyExists" : self = .dBInstanceAlreadyExistsFault(try DBInstanceAlreadyExistsFault(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "DBSubnetGroupNotFoundFault" : self = .dBSubnetGroupNotFoundFault(try DBSubnetGroupNotFoundFault(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "DomainNotFoundFault" : self = .domainNotFoundFault(try DomainNotFoundFault(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) case "InvalidDBClusterStateFault" : self = .invalidDBClusterStateFault(try InvalidDBClusterStateFault(httpResponse: httpResponse, decoder: decoder, message: message, requestID: requestID)) @@ -36632,6 +36655,7 @@ public enum ModifyDBClusterOutputError: Swift.Error, Swift.Equatable { case dBClusterAlreadyExistsFault(DBClusterAlreadyExistsFault) case dBClusterNotFoundFault(DBClusterNotFoundFault) case dBClusterParameterGroupNotFoundFault(DBClusterParameterGroupNotFoundFault) + case dBInstanceAlreadyExistsFault(DBInstanceAlreadyExistsFault) case dBSubnetGroupNotFoundFault(DBSubnetGroupNotFoundFault) case domainNotFoundFault(DomainNotFoundFault) case invalidDBClusterStateFault(InvalidDBClusterStateFault) diff --git a/Sources/Services/AWSRoute53/EndpointResolver.swift b/Sources/Services/AWSRoute53/EndpointResolver.swift index 2ebb57755bf..357b2f9417a 100644 --- a/Sources/Services/AWSRoute53/EndpointResolver.swift +++ b/Sources/Services/AWSRoute53/EndpointResolver.swift @@ -35,7 +35,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://route53.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"route53\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://route53-fips.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"route53\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-cn\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://route53.amazonaws.com.cn\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"cn-northwest-1\",\"signingName\":\"route53\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-us-gov\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://route53.us-gov.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-gov-west-1\",\"signingName\":\"route53\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-us-gov\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://route53.us-gov.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-gov-west-1\",\"signingName\":\"route53\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-iso\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://route53.c2s.ic.gov\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-iso-east-1\",\"signingName\":\"route53\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-iso-b\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://route53.sc2s.sgov.gov\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-isob-east-1\",\"signingName\":\"route53\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://route53-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://route53-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://route53.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://route53.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" + private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://route53.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"route53\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://route53-fips.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"route53\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-cn\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://route53.amazonaws.com.cn\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"route53\",\"signingRegion\":\"cn-northwest-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-us-gov\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://route53.us-gov.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"route53\",\"signingRegion\":\"us-gov-west-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-us-gov\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://route53.us-gov.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"route53\",\"signingRegion\":\"us-gov-west-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-iso\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://route53.c2s.ic.gov\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"route53\",\"signingRegion\":\"us-iso-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-iso-b\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://route53.sc2s.sgov.gov\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"route53\",\"signingRegion\":\"us-isob-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://route53-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://route53-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://route53.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://route53.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSRoute53RecoveryControlConfig/EndpointResolver.swift b/Sources/Services/AWSRoute53RecoveryControlConfig/EndpointResolver.swift index 730b0bc325e..ed5041dce95 100644 --- a/Sources/Services/AWSRoute53RecoveryControlConfig/EndpointResolver.swift +++ b/Sources/Services/AWSRoute53RecoveryControlConfig/EndpointResolver.swift @@ -35,7 +35,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://route53-recovery-control-config-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://route53-recovery-control-config-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://route53-recovery-control-config.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://route53-recovery-control-config.us-west-2.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-west-2\",\"signingName\":\"route53-recovery-control-config\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://route53-recovery-control-config.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" + private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://route53-recovery-control-config-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://route53-recovery-control-config-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://route53-recovery-control-config.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://route53-recovery-control-config.us-west-2.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"route53-recovery-control-config\",\"signingRegion\":\"us-west-2\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://route53-recovery-control-config.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSS3/EndpointResolver.swift b/Sources/Services/AWSS3/EndpointResolver.swift index 6737832bbe4..b87c4d28953 100644 --- a/Sources/Services/AWSS3/EndpointResolver.swift +++ b/Sources/Services/AWSS3/EndpointResolver.swift @@ -67,7 +67,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private 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\":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\"},\"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\"}},\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"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\":\"abbaSuffix\"},{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},32,49,true],\"assign\":\"outpostId\"},{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"regionPartition\"},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"abbaSuffix\"},\"--op-s3\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"outpostId\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"hardwareType\"},\"e\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"regionPrefix\"},\"beta\"]}],\"type\":\"tree\",\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3-outposts\"}]},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.ec2.s3-outposts.{Region}.{regionPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3-outposts\"}]},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"hardwareType\"},\"o\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"regionPrefix\"},\"beta\"]}],\"type\":\"tree\",\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3-outposts\"}]},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.op-{outpostId}.s3-outposts.{Region}.{regionPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3-outposts\"}]},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"error\":\"Unrecognized hardware type: \\\"Expected hardware type o or e but got {hardwareType}\\\"\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The outpost Id must only contain a-z, A-Z, 0-9 and `-`.\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Bucket\"}]}],\"type\":\"tree\",\"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\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"ForcePathStyle\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"ForcePathStyle\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"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\"}],\"type\":\"tree\",\"rules\":[{\"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\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},false]}],\"endpoint\":{\"url\":\"https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},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}{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3-fips.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},false]}],\"endpoint\":{\"url\":\"https://s3-fips.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},false]}],\"endpoint\":{\"url\":\"https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},false]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"https://s3.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},false]}],\"endpoint\":{\"url\":\"https://s3.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"Path-style addressing cannot be used with S3 Accelerate\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]}]}]}]},{\"conditions\":[{\"fn\":\"aws.isVirtualHostableS3Bucket\",\"argv\":[{\"ref\":\"Bucket\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"Region\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]},\"aws-cn\"]}],\"error\":\"Partition does not support FIPS\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Accelerate cannot be used with FIPS\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"Host override cannot be combined with Dualstack, FIPS, or S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Host override cannot be combined with Dualstack, FIPS, or S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"Host override cannot be combined with Dualstack, FIPS, or S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},false]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3-fips.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},false]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3-fips.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3-accelerate.dualstack.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},false]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3-accelerate.dualstack.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},false]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{Bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{Bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{Bucket}.{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{Bucket}.{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},false]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{Bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3-accelerate.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3-accelerate.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},false]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3-accelerate.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},false]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"}]}]}]}]}]}]}]}]},{\"conditions\":[],\"error\":\"Invalid region: region was not a valid DNS name.\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]},{\"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\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"Region\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{Bucket}.{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"error\":\"Invalid region: region was not a valid DNS name.\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"aws.parseArn\",\"argv\":[{\"ref\":\"Bucket\"}],\"assign\":\"bucketArn\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[0]\"],\"assign\":\"arnType\"},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"arnType\"},\"\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"service\"]},\"s3-object-lambda\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"arnType\"},\"accesspoint\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[1]\"],\"assign\":\"accessPointName\"},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"accessPointName\"},\"\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"S3 Object Lambda does not support Dual-stack\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"S3 Object Lambda does not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},\"\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"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\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[2]\"]}]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"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\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]}],\"assign\":\"bucketPartition\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketPartition\"},\"name\"]},{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"accountId\"]},\"\"]}],\"error\":\"Invalid ARN: Missing account id\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"accountId\"]},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"accessPointName\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketPartition\"},\"name\"]},\"aws-cn\"]}],\"error\":\"Partition does not support FIPS\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"{bucketArn#region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3-object-lambda\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"{bucketArn#region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3-object-lambda\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{accessPointName}-{bucketArn#accountId}.s3-object-lambda.{bucketArn#region}.{bucketPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{bucketArn#region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3-object-lambda\"}]},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The access point name may only contain a-z, A-Z, 0-9 and `-`. Found: `{accessPointName}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Client was configured for partition `{partitionResult#name}` but ARN (`{Bucket}`) has `{bucketPartition#name}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Could not load partition for ARN region `{bucketArn#region}`\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The ARN may only contain a single resource component after `accesspoint`.\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: bucket ARN is missing a region\",\"type\":\"error\"}]}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: Expected a resource of the format `accesspoint:` but no name was provided\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: Object Lambda ARNs only support `accesspoint` arn types, but found: `{arnType}`\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"arnType\"},\"accesspoint\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[1]\"],\"assign\":\"accessPointName\"},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"accessPointName\"},\"\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},\"\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"arnType\"},\"accesspoint\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},\"\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"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\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[2]\"]}]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"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\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]}],\"assign\":\"bucketPartition\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketPartition\"},\"name\"]},\"{partitionResult#name}\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"service\"]},\"s3\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"accountId\"]},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"accessPointName\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"Access Points do not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketPartition\"},\"name\"]},\"aws-cn\"]}],\"error\":\"Partition does not support FIPS\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}],\"error\":\"DualStack cannot be combined with a Host override (PrivateLink)\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"{bucketArn#region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"{bucketArn#region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"{bucketArn#region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"{bucketArn#region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"{bucketArn#region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"}]}]}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The access point name may only contain a-z, A-Z, 0-9 and `-`. Found: `{accessPointName}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The ARN was not for the S3 service, found: {bucketArn#service}\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Client was configured for partition `{partitionResult#name}` but ARN (`{Bucket}`) has `{bucketPartition#name}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Could not load partition for ARN region `{bucketArn#region}`\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The ARN may only contain a single resource component after `accesspoint`.\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: bucket ARN is missing a region\",\"type\":\"error\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"accessPointName\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"S3 MRAP does not support dual-stack\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"S3 MRAP does not support FIPS\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"S3 MRAP does not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"DisableMultiRegionAccessPoints\"},true]}],\"error\":\"Invalid configuration: Multi-Region Access Point ARNs are disabled.\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"mrapPartition\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"mrapPartition\"},\"name\"]},{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"partition\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://{accessPointName}.accesspoint.s3-global.{mrapPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4a\",\"signingRegionSet\":[\"*\"],\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"error\":\"Client was configured for partition `{mrapPartition#name}` but bucket referred to partition `{bucketArn#partition}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"{Region} was not a valid region\",\"type\":\"error\"}]}]}]}]}]}]},{\"conditions\":[],\"error\":\"Invalid Access Point Name\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: Expected a resource of the format `accesspoint:` but no name was provided\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"service\"]},\"s3-outposts\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"S3 Outposts does not support Dual-stack\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"S3 Outposts does not support FIPS\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"S3 Outposts does not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[4]\"]}]}],\"error\":\"Invalid Arn: Outpost Access Point ARN contains sub resources\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[1]\"],\"assign\":\"outpostId\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"outpostId\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"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\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]}],\"assign\":\"bucketPartition\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketPartition\"},\"name\"]},{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"accountId\"]},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[2]\"],\"assign\":\"outpostType\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[3]\"],\"assign\":\"accessPointName\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"outpostType\"},\"accesspoint\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"{bucketArn#region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3-outposts\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{accessPointName}-{bucketArn#accountId}.{outpostId}.s3-outposts.{bucketArn#region}.{bucketPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{bucketArn#region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3-outposts\"}]},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"Expected an outpost type `accesspoint`, found {outpostType}\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: expected an access point name\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: Expected a 4-component resource\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Client was configured for partition `{partitionResult#name}` but ARN (`{Bucket}`) has `{bucketPartition#name}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Could not load partition for ARN region {bucketArn#region}\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The outpost Id may only contain a-z, A-Z, 0-9 and `-`. Found: `{outpostId}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The Outpost Id was not set\",\"type\":\"error\"}]}]}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: Unrecognized format: {Bucket} (type: {arnType})\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: No ARN type specified\",\"type\":\"error\"}]},{\"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\":\"uriEncode\",\"argv\":[{\"ref\":\"Bucket\"}],\"assign\":\"uri_encoded_bucket\"}],\"type\":\"tree\",\"rules\":[{\"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\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},false]}],\"endpoint\":{\"url\":\"https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},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}{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3-fips.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},false]}],\"endpoint\":{\"url\":\"https://s3-fips.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},false]}],\"endpoint\":{\"url\":\"https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},false]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"https://s3.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},false]}],\"endpoint\":{\"url\":\"https://s3.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"Path-style addressing cannot be used with S3 Accelerate\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]}]}]}]},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"UseObjectLambdaEndpoint\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseObjectLambdaEndpoint\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"Region\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"S3 Object Lambda does not support Dual-stack\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"S3 Object Lambda does not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]},\"aws-cn\"]}],\"error\":\"Partition does not support FIPS\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3-object-lambda\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://s3-object-lambda-fips.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3-object-lambda\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3-object-lambda.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3-object-lambda\"}]},\"headers\":{}},\"type\":\"endpoint\"}]}]}]}]}]},{\"conditions\":[],\"error\":\"Invalid region: region was not a valid DNS name.\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Bucket\"}]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"Region\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]},\"aws-cn\"]}],\"error\":\"Partition does not support FIPS\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},false]}],\"endpoint\":{\"url\":\"https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3-fips.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},false]}],\"endpoint\":{\"url\":\"https://s3-fips.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},false]}],\"endpoint\":{\"url\":\"https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},false]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"https://s3.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"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\"},false]}],\"endpoint\":{\"url\":\"https://s3.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid region: region was not a valid DNS name.\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"A region must be set when sending requests to S3.\",\"type\":\"error\"}]}]}" + private 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\":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\"},\"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\"}},\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"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\":\"abbaSuffix\"},{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},32,49,true],\"assign\":\"outpostId\"},{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"regionPartition\"},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"abbaSuffix\"},\"--op-s3\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"outpostId\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"hardwareType\"},\"e\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"regionPrefix\"},\"beta\"]}],\"type\":\"tree\",\"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\":\"sigv4\",\"signingName\":\"s3-outposts\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.ec2.s3-outposts.{Region}.{regionPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-outposts\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"hardwareType\"},\"o\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"regionPrefix\"},\"beta\"]}],\"type\":\"tree\",\"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\":\"sigv4\",\"signingName\":\"s3-outposts\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.op-{outpostId}.s3-outposts.{Region}.{regionPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-outposts\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"error\":\"Unrecognized hardware type: \\\"Expected hardware type o or e but got {hardwareType}\\\"\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The outpost Id must only contain a-z, A-Z, 0-9 and `-`.\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Bucket\"}]}],\"type\":\"tree\",\"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\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"ForcePathStyle\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"ForcePathStyle\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"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\"}],\"type\":\"tree\",\"rules\":[{\"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\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"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\":\"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]}],\"type\":\"tree\",\"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\"}]},{\"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\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"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\"},true]},{\"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\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"type\":\"tree\",\"rules\":[{\"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\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},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}{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\":\"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]}],\"type\":\"tree\",\"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\"}]},{\"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\":\"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]}],\"type\":\"tree\",\"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\"}]},{\"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\":\"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]}],\"type\":\"tree\",\"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\"}]},{\"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\":\"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]}],\"type\":\"tree\",\"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\"}]},{\"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\"}]}]},{\"conditions\":[],\"error\":\"Path-style addressing cannot be used with S3 Accelerate\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]}]}]}]},{\"conditions\":[{\"fn\":\"aws.isVirtualHostableS3Bucket\",\"argv\":[{\"ref\":\"Bucket\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"Region\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]},\"aws-cn\"]}],\"error\":\"Partition does not support FIPS\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Accelerate cannot be used with FIPS\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"Host override cannot be combined with Dualstack, FIPS, or S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Host override cannot be combined with Dualstack, FIPS, or S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"Host override cannot be combined with Dualstack, FIPS, or S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"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\":\"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]}],\"type\":\"tree\",\"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\"}]},{\"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\":\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"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\"},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\":\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"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\"},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\":\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"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\"},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\":\"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]}],\"type\":\"tree\",\"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\"}]},{\"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]}],\"type\":\"tree\",\"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\"}]},{\"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\":\"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]}],\"type\":\"tree\",\"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\"}]},{\"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\":\"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]}],\"type\":\"tree\",\"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\"}]},{\"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\"}]}]}]}]}]}]}]}]},{\"conditions\":[],\"error\":\"Invalid region: region was not a valid DNS name.\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]},{\"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\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"Region\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{Bucket}.{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"error\":\"Invalid region: region was not a valid DNS name.\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"aws.parseArn\",\"argv\":[{\"ref\":\"Bucket\"}],\"assign\":\"bucketArn\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[0]\"],\"assign\":\"arnType\"},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"arnType\"},\"\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"service\"]},\"s3-object-lambda\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"arnType\"},\"accesspoint\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[1]\"],\"assign\":\"accessPointName\"},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"accessPointName\"},\"\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"S3 Object Lambda does not support Dual-stack\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"S3 Object Lambda does not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},\"\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"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\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[2]\"]}]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"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\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]}],\"assign\":\"bucketPartition\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketPartition\"},\"name\"]},{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"accountId\"]},\"\"]}],\"error\":\"Invalid ARN: Missing account id\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"accountId\"]},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"accessPointName\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketPartition\"},\"name\"]},\"aws-cn\"]}],\"error\":\"Partition does not support FIPS\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The access point name may only contain a-z, A-Z, 0-9 and `-`. Found: `{accessPointName}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Client was configured for partition `{partitionResult#name}` but ARN (`{Bucket}`) has `{bucketPartition#name}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Could not load partition for ARN region `{bucketArn#region}`\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The ARN may only contain a single resource component after `accesspoint`.\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: bucket ARN is missing a region\",\"type\":\"error\"}]}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: Expected a resource of the format `accesspoint:` but no name was provided\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: Object Lambda ARNs only support `accesspoint` arn types, but found: `{arnType}`\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"arnType\"},\"accesspoint\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[1]\"],\"assign\":\"accessPointName\"},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"accessPointName\"},\"\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},\"\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"arnType\"},\"accesspoint\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},\"\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"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\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[2]\"]}]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"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\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]}],\"assign\":\"bucketPartition\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketPartition\"},\"name\"]},\"{partitionResult#name}\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"service\"]},\"s3\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"accountId\"]},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"accessPointName\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"Access Points do not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketPartition\"},\"name\"]},\"aws-cn\"]}],\"error\":\"Partition does not support FIPS\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}],\"error\":\"DualStack cannot be combined with a Host override (PrivateLink)\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"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\"}]}]}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The access point name may only contain a-z, A-Z, 0-9 and `-`. Found: `{accessPointName}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The ARN was not for the S3 service, found: {bucketArn#service}\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Client was configured for partition `{partitionResult#name}` but ARN (`{Bucket}`) has `{bucketPartition#name}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Could not load partition for ARN region `{bucketArn#region}`\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The ARN may only contain a single resource component after `accesspoint`.\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: bucket ARN is missing a region\",\"type\":\"error\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"accessPointName\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"S3 MRAP does not support dual-stack\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"S3 MRAP does not support FIPS\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"S3 MRAP does not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"DisableMultiRegionAccessPoints\"},true]}],\"error\":\"Invalid configuration: Multi-Region Access Point ARNs are disabled.\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"mrapPartition\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"mrapPartition\"},\"name\"]},{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"partition\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://{accessPointName}.accesspoint.s3-global.{mrapPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4a\",\"signingName\":\"s3\",\"signingRegionSet\":[\"*\"]}]},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"error\":\"Client was configured for partition `{mrapPartition#name}` but bucket referred to partition `{bucketArn#partition}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"{Region} was not a valid region\",\"type\":\"error\"}]}]}]}]}]}]},{\"conditions\":[],\"error\":\"Invalid Access Point Name\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: Expected a resource of the format `accesspoint:` but no name was provided\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"service\"]},\"s3-outposts\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"S3 Outposts does not support Dual-stack\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"S3 Outposts does not support FIPS\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"S3 Outposts does not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[4]\"]}]}],\"error\":\"Invalid Arn: Outpost Access Point ARN contains sub resources\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[1]\"],\"assign\":\"outpostId\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"outpostId\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"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\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]}],\"assign\":\"bucketPartition\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketPartition\"},\"name\"]},{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"accountId\"]},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[2]\"],\"assign\":\"outpostType\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[3]\"],\"assign\":\"accessPointName\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"outpostType\"},\"accesspoint\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"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\":\"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\":\"sigv4\",\"signingName\":\"s3-outposts\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"Expected an outpost type `accesspoint`, found {outpostType}\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: expected an access point name\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: Expected a 4-component resource\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Client was configured for partition `{partitionResult#name}` but ARN (`{Bucket}`) has `{bucketPartition#name}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Could not load partition for ARN region {bucketArn#region}\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The outpost Id may only contain a-z, A-Z, 0-9 and `-`. Found: `{outpostId}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The Outpost Id was not set\",\"type\":\"error\"}]}]}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: Unrecognized format: {Bucket} (type: {arnType})\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: No ARN type specified\",\"type\":\"error\"}]},{\"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\":\"uriEncode\",\"argv\":[{\"ref\":\"Bucket\"}],\"assign\":\"uri_encoded_bucket\"}],\"type\":\"tree\",\"rules\":[{\"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\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"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\":\"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]}],\"type\":\"tree\",\"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\"}]},{\"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\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"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\"},true]},{\"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\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"type\":\"tree\",\"rules\":[{\"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\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},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}{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\":\"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]}],\"type\":\"tree\",\"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\"}]},{\"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\":\"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]}],\"type\":\"tree\",\"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\"}]},{\"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\":\"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]}],\"type\":\"tree\",\"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\"}]},{\"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\":\"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]}],\"type\":\"tree\",\"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\"}]},{\"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\"}]}]},{\"conditions\":[],\"error\":\"Path-style addressing cannot be used with S3 Accelerate\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]}]}]}]},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"UseObjectLambdaEndpoint\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseObjectLambdaEndpoint\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"Region\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"S3 Object Lambda does not support Dual-stack\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"S3 Object Lambda does not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]},\"aws-cn\"]}],\"error\":\"Partition does not support FIPS\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"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\"}]}]}]}]}]},{\"conditions\":[],\"error\":\"Invalid region: region was not a valid DNS name.\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Bucket\"}]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"Region\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]},\"aws-cn\"]}],\"error\":\"Partition does not support FIPS\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"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\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"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\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"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\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"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\"},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\":\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"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\"},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\":\"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\"},true]},{\"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\"},true]},{\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"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\"},true]},{\"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\"},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\":\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"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\"},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\":\"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\"},true]},{\"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\"},true]},{\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"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\"},true]},{\"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\"},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\":\"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]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"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\"},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\":\"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]}],\"type\":\"tree\",\"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\"}]},{\"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\":\"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]}],\"type\":\"tree\",\"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\"}]},{\"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\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid region: region was not a valid DNS name.\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"A region must be set when sending requests to S3.\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSS3Control/EndpointResolver.swift b/Sources/Services/AWSS3Control/EndpointResolver.swift index 282481e5c48..9869f0dec63 100644 --- a/Sources/Services/AWSS3Control/EndpointResolver.swift +++ b/Sources/Services/AWSS3Control/EndpointResolver.swift @@ -59,7 +59,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private let ruleSet = "{\"version\":\"1.0\",\"parameters\":{\"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\"},\"AccountId\":{\"required\":false,\"documentation\":\"The Account ID used to send the request. This is an optional parameter that will be set automatically for operations that require it.\",\"type\":\"String\"},\"RequiresAccountId\":{\"required\":false,\"documentation\":\"Internal parameter for operations that require account id host prefix.\",\"type\":\"Boolean\"},\"OutpostId\":{\"required\":false,\"documentation\":\"The Outpost ID. Some operations have an optional OutpostId which should be used in endpoint construction.\",\"type\":\"String\"},\"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\"},\"AccessPointName\":{\"required\":false,\"documentation\":\"The S3 AccessPointName used to send the request. This is an optional parameter that will be set automatically for operations that are scoped to an S3 AccessPoint.\",\"type\":\"String\"},\"UseArnRegion\":{\"builtIn\":\"AWS::S3Control::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\"}},\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"OutpostId\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]},\"aws-cn\"]}],\"error\":\"Partition does not support FIPS\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"RequiresAccountId\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"RequiresAccountId\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"AccountId\"}]}]}],\"error\":\"AccountId is required but not set\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"AccountId\"}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"AccountId\"},false]}]}],\"error\":\"AccountId must only contain a-z, A-Z, 0-9 and `-`.\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"OutpostId\"},false]}]}],\"error\":\"OutpostId must only contain a-z, A-Z, 0-9 and `-`.\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"Region\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"Invalid configuration: Outposts do not support dual-stack\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3-outposts\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://s3-outposts-fips.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3-outposts\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3-outposts.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3-outposts\"}]},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid region: region was not a valid DNS name.\",\"type\":\"error\"}]}]}]}]}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"AccessPointName\"}]},{\"fn\":\"aws.parseArn\",\"argv\":[{\"ref\":\"AccessPointName\"}],\"assign\":\"accessPointArn\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"accessPointArn\"},\"resourceId[0]\"],\"assign\":\"arnType\"},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"arnType\"},\"\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"accessPointArn\"},\"service\"]},\"s3-outposts\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"Invalid configuration: Outpost Access Points do not support dual-stack\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"accessPointArn\"},\"resourceId[1]\"],\"assign\":\"outpostId\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"outpostId\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"UseArnRegion\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseArnRegion\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"accessPointArn\"},\"region\"]},\"{Region}\"]}]}],\"error\":\"Invalid configuration: region from ARN `{accessPointArn#region}` does not match client region `{Region}` and UseArnRegion is `false`\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"accessPointArn\"},\"region\"]}],\"assign\":\"arnPartition\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"arnPartition\"},\"name\"]},{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"accessPointArn\"},\"region\"]},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"accessPointArn\"},\"accountId\"]},\"\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"accessPointArn\"},\"accountId\"]},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"AccountId\"}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"AccountId\"},\"{accessPointArn#accountId}\"]}]}],\"error\":\"Invalid ARN: the accountId specified in the ARN (`{accessPointArn#accountId}`) does not match the parameter (`{AccountId}`)\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"accessPointArn\"},\"resourceId[2]\"],\"assign\":\"outpostType\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"accessPointArn\"},\"resourceId[3]\"],\"assign\":\"accessPointName\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"outpostType\"},\"accesspoint\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://s3-outposts-fips.{accessPointArn#region}.{arnPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{accessPointArn#region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3-outposts\"}]},\"headers\":{\"x-amz-account-id\":[\"{accessPointArn#accountId}\"],\"x-amz-outpost-id\":[\"{outpostId}\"]}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{accessPointArn#region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3-outposts\"}]},\"headers\":{\"x-amz-account-id\":[\"{accessPointArn#accountId}\"],\"x-amz-outpost-id\":[\"{outpostId}\"]}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3-outposts.{accessPointArn#region}.{arnPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{accessPointArn#region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3-outposts\"}]},\"headers\":{\"x-amz-account-id\":[\"{accessPointArn#accountId}\"],\"x-amz-outpost-id\":[\"{outpostId}\"]}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"Expected an outpost type `accesspoint`, found `{outpostType}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: expected an access point name\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: Expected a 4-component resource\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{accessPointArn#accountId}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: missing account ID\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid region in ARN: `{accessPointArn#region}` (invalid DNS name)\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Client was configured for partition `{partitionResult#name}` but ARN has `{arnPartition#name}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Could not load partition for ARN region `{accessPointArn#region}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The outpost Id must only contain a-z, A-Z, 0-9 and `-`., found: `{outpostId}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The Outpost Id was not set\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: No ARN type specified\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Bucket\"}]},{\"fn\":\"aws.parseArn\",\"argv\":[{\"ref\":\"Bucket\"}],\"assign\":\"bucketArn\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[0]\"],\"assign\":\"arnType\"},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"arnType\"},\"\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"service\"]},\"s3-outposts\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"Invalid configuration: Outpost buckets do not support dual-stack\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[1]\"],\"assign\":\"outpostId\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"outpostId\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"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\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]}],\"assign\":\"arnPartition\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"arnPartition\"},\"name\"]},{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"accountId\"]},\"\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"accountId\"]},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"AccountId\"}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"AccountId\"},\"{bucketArn#accountId}\"]}]}],\"error\":\"Invalid ARN: the accountId specified in the ARN (`{bucketArn#accountId}`) does not match the parameter (`{AccountId}`)\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[2]\"],\"assign\":\"outpostType\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[3]\"],\"assign\":\"bucketName\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"outpostType\"},\"bucket\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://s3-outposts-fips.{bucketArn#region}.{arnPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{bucketArn#region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3-outposts\"}]},\"headers\":{\"x-amz-account-id\":[\"{bucketArn#accountId}\"],\"x-amz-outpost-id\":[\"{outpostId}\"]}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{bucketArn#region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3-outposts\"}]},\"headers\":{\"x-amz-account-id\":[\"{bucketArn#accountId}\"],\"x-amz-outpost-id\":[\"{outpostId}\"]}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3-outposts.{bucketArn#region}.{arnPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{bucketArn#region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3-outposts\"}]},\"headers\":{\"x-amz-account-id\":[\"{bucketArn#accountId}\"],\"x-amz-outpost-id\":[\"{outpostId}\"]}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: Expected an outpost type `bucket`, found `{outpostType}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: expected a bucket name\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: Expected a 4-component resource\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: missing account ID\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Client was configured for partition `{partitionResult#name}` but ARN has `{arnPartition#name}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Could not load partition for ARN region `{bucketArn#region}`\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The outpost Id must only contain a-z, A-Z, 0-9 and `-`., found: `{outpostId}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The Outpost Id was not set\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: No ARN type specified\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"Region\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]},\"aws-cn\"]}],\"error\":\"Partition does not support FIPS\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"RequiresAccountId\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"RequiresAccountId\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"AccountId\"}]}]}],\"error\":\"AccountId is required but not set\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"AccountId\"}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"AccountId\"},false]}]}],\"error\":\"AccountId must only contain a-z, A-Z, 0-9 and `-`.\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"Invalid Configuration: Dualstack and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"RequiresAccountId\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"RequiresAccountId\"},true]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"AccountId\"}]}],\"endpoint\":{\"url\":\"{url#scheme}://{AccountId}.{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"RequiresAccountId\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"RequiresAccountId\"},true]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"AccountId\"}]}],\"endpoint\":{\"url\":\"https://{AccountId}.s3-control-fips.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"endpoint\":{\"url\":\"https://s3-control-fips.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"RequiresAccountId\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"RequiresAccountId\"},true]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"AccountId\"}]}],\"endpoint\":{\"url\":\"https://{AccountId}.s3-control-fips.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://s3-control-fips.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"RequiresAccountId\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"RequiresAccountId\"},true]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"AccountId\"}]}],\"endpoint\":{\"url\":\"https://{AccountId}.s3-control.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"endpoint\":{\"url\":\"https://s3-control.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"RequiresAccountId\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"RequiresAccountId\"},true]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"AccountId\"}]}],\"endpoint\":{\"url\":\"https://{AccountId}.s3-control.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://s3-control.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"disableDoubleEncoding\":true,\"signingName\":\"s3\"}]},\"headers\":{}},\"type\":\"endpoint\"}]}]}]}]}]}]},{\"conditions\":[],\"error\":\"Invalid region: region was not a valid DNS name.\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Region must be set\",\"type\":\"error\"}]}]}" + private let ruleSet = "{\"version\":\"1.0\",\"parameters\":{\"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\"},\"AccountId\":{\"required\":false,\"documentation\":\"The Account ID used to send the request. This is an optional parameter that will be set automatically for operations that require it.\",\"type\":\"String\"},\"RequiresAccountId\":{\"required\":false,\"documentation\":\"Internal parameter for operations that require account id host prefix.\",\"type\":\"Boolean\"},\"OutpostId\":{\"required\":false,\"documentation\":\"The Outpost ID. Some operations have an optional OutpostId which should be used in endpoint construction.\",\"type\":\"String\"},\"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\"},\"AccessPointName\":{\"required\":false,\"documentation\":\"The S3 AccessPointName used to send the request. This is an optional parameter that will be set automatically for operations that are scoped to an S3 AccessPoint.\",\"type\":\"String\"},\"UseArnRegion\":{\"builtIn\":\"AWS::S3Control::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\"}},\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"OutpostId\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]},\"aws-cn\"]}],\"error\":\"Partition does not support FIPS\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"RequiresAccountId\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"RequiresAccountId\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"AccountId\"}]}]}],\"error\":\"AccountId is required but not set\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"AccountId\"}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"AccountId\"},false]}]}],\"error\":\"AccountId must only contain a-z, A-Z, 0-9 and `-`.\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"OutpostId\"},false]}]}],\"error\":\"OutpostId must only contain a-z, A-Z, 0-9 and `-`.\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"Region\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"Invalid configuration: Outposts do not support dual-stack\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"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-outposts\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://s3-outposts-fips.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-outposts\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3-outposts.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-outposts\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid region: region was not a valid DNS name.\",\"type\":\"error\"}]}]}]}]}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"AccessPointName\"}]},{\"fn\":\"aws.parseArn\",\"argv\":[{\"ref\":\"AccessPointName\"}],\"assign\":\"accessPointArn\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"accessPointArn\"},\"resourceId[0]\"],\"assign\":\"arnType\"},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"arnType\"},\"\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"accessPointArn\"},\"service\"]},\"s3-outposts\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"Invalid configuration: Outpost Access Points do not support dual-stack\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"accessPointArn\"},\"resourceId[1]\"],\"assign\":\"outpostId\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"outpostId\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"UseArnRegion\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseArnRegion\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"accessPointArn\"},\"region\"]},\"{Region}\"]}]}],\"error\":\"Invalid configuration: region from ARN `{accessPointArn#region}` does not match client region `{Region}` and UseArnRegion is `false`\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"accessPointArn\"},\"region\"]}],\"assign\":\"arnPartition\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"arnPartition\"},\"name\"]},{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"accessPointArn\"},\"region\"]},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"accessPointArn\"},\"accountId\"]},\"\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"accessPointArn\"},\"accountId\"]},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"AccountId\"}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"AccountId\"},\"{accessPointArn#accountId}\"]}]}],\"error\":\"Invalid ARN: the accountId specified in the ARN (`{accessPointArn#accountId}`) does not match the parameter (`{AccountId}`)\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"accessPointArn\"},\"resourceId[2]\"],\"assign\":\"outpostType\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"accessPointArn\"},\"resourceId[3]\"],\"assign\":\"accessPointName\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"outpostType\"},\"accesspoint\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://s3-outposts-fips.{accessPointArn#region}.{arnPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-outposts\",\"signingRegion\":\"{accessPointArn#region}\"}]},\"headers\":{\"x-amz-account-id\":[\"{accessPointArn#accountId}\"],\"x-amz-outpost-id\":[\"{outpostId}\"]}},\"type\":\"endpoint\"},{\"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-outposts\",\"signingRegion\":\"{accessPointArn#region}\"}]},\"headers\":{\"x-amz-account-id\":[\"{accessPointArn#accountId}\"],\"x-amz-outpost-id\":[\"{outpostId}\"]}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3-outposts.{accessPointArn#region}.{arnPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-outposts\",\"signingRegion\":\"{accessPointArn#region}\"}]},\"headers\":{\"x-amz-account-id\":[\"{accessPointArn#accountId}\"],\"x-amz-outpost-id\":[\"{outpostId}\"]}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"Expected an outpost type `accesspoint`, found `{outpostType}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: expected an access point name\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: Expected a 4-component resource\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{accessPointArn#accountId}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: missing account ID\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid region in ARN: `{accessPointArn#region}` (invalid DNS name)\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Client was configured for partition `{partitionResult#name}` but ARN has `{arnPartition#name}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Could not load partition for ARN region `{accessPointArn#region}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The outpost Id must only contain a-z, A-Z, 0-9 and `-`., found: `{outpostId}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The Outpost Id was not set\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: No ARN type specified\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Bucket\"}]},{\"fn\":\"aws.parseArn\",\"argv\":[{\"ref\":\"Bucket\"}],\"assign\":\"bucketArn\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[0]\"],\"assign\":\"arnType\"},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"arnType\"},\"\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"service\"]},\"s3-outposts\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"Invalid configuration: Outpost buckets do not support dual-stack\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[1]\"],\"assign\":\"outpostId\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"outpostId\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"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\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]}],\"assign\":\"arnPartition\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"arnPartition\"},\"name\"]},{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"accountId\"]},\"\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"accountId\"]},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"AccountId\"}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"AccountId\"},\"{bucketArn#accountId}\"]}]}],\"error\":\"Invalid ARN: the accountId specified in the ARN (`{bucketArn#accountId}`) does not match the parameter (`{AccountId}`)\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[2]\"],\"assign\":\"outpostType\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[3]\"],\"assign\":\"bucketName\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"outpostType\"},\"bucket\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://s3-outposts-fips.{bucketArn#region}.{arnPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-outposts\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{\"x-amz-account-id\":[\"{bucketArn#accountId}\"],\"x-amz-outpost-id\":[\"{outpostId}\"]}},\"type\":\"endpoint\"},{\"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-outposts\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{\"x-amz-account-id\":[\"{bucketArn#accountId}\"],\"x-amz-outpost-id\":[\"{outpostId}\"]}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3-outposts.{bucketArn#region}.{arnPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-outposts\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{\"x-amz-account-id\":[\"{bucketArn#accountId}\"],\"x-amz-outpost-id\":[\"{outpostId}\"]}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: Expected an outpost type `bucket`, found `{outpostType}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: expected a bucket name\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: Expected a 4-component resource\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: missing account ID\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Client was configured for partition `{partitionResult#name}` but ARN has `{arnPartition#name}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Could not load partition for ARN region `{bucketArn#region}`\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The outpost Id must only contain a-z, A-Z, 0-9 and `-`., found: `{outpostId}`\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: The Outpost Id was not set\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid ARN: No ARN type specified\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"Region\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]},\"aws-cn\"]}],\"error\":\"Partition does not support FIPS\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"RequiresAccountId\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"RequiresAccountId\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"AccountId\"}]}]}],\"error\":\"AccountId is required but not set\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"AccountId\"}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"AccountId\"},false]}]}],\"error\":\"AccountId must only contain a-z, A-Z, 0-9 and `-`.\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"Invalid Configuration: Dualstack and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"RequiresAccountId\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"RequiresAccountId\"},true]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"AccountId\"}]}],\"endpoint\":{\"url\":\"{url#scheme}://{AccountId}.{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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"RequiresAccountId\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"RequiresAccountId\"},true]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"AccountId\"}]}],\"endpoint\":{\"url\":\"https://{AccountId}.s3-control-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\"},true]}],\"endpoint\":{\"url\":\"https://s3-control-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\":\"isSet\",\"argv\":[{\"ref\":\"RequiresAccountId\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"RequiresAccountId\"},true]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"AccountId\"}]}],\"endpoint\":{\"url\":\"https://{AccountId}.s3-control-fips.{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]}],\"endpoint\":{\"url\":\"https://s3-control-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\":\"isSet\",\"argv\":[{\"ref\":\"RequiresAccountId\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"RequiresAccountId\"},true]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"AccountId\"}]}],\"endpoint\":{\"url\":\"https://{AccountId}.s3-control.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\"},true]}],\"endpoint\":{\"url\":\"https://s3-control.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\":\"RequiresAccountId\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"RequiresAccountId\"},true]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"AccountId\"}]}],\"endpoint\":{\"url\":\"https://{AccountId}.s3-control.{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]}],\"endpoint\":{\"url\":\"https://s3-control.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}]}]}]}]}]}]},{\"conditions\":[],\"error\":\"Invalid region: region was not a valid DNS name.\",\"type\":\"error\"}]}]},{\"conditions\":[],\"error\":\"A valid partition could not be determined\",\"type\":\"error\"}]}]}]},{\"conditions\":[],\"error\":\"Region must be set\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSSTS/EndpointResolver.swift b/Sources/Services/AWSSTS/EndpointResolver.swift index 5a930d75468..18c23f616dd 100644 --- a/Sources/Services/AWSSTS/EndpointResolver.swift +++ b/Sources/Services/AWSSTS/EndpointResolver.swift @@ -39,7 +39,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private 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\"},\"UseGlobalEndpoint\":{\"builtIn\":\"AWS::STS::UseGlobalEndpoint\",\"required\":true,\"default\":false,\"documentation\":\"Whether the global endpoint should be used, rather then the regional endpoint for us-east-1.\",\"type\":\"Boolean\"}},\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]},{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"ap-northeast-1\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"sts\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"ap-south-1\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"sts\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"ap-southeast-1\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"sts\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"ap-southeast-2\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"sts\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"sts\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"ca-central-1\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"sts\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"eu-central-1\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"sts\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"eu-north-1\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"sts\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"eu-west-1\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"sts\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"eu-west-2\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"sts\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"eu-west-3\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"sts\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"sa-east-1\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"sts\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"sts\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-2\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"sts\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-west-1\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"sts\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-west-2\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"sts\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://sts.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"{Region}\",\"signingName\":\"sts\"}]},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://sts-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[\"aws-us-gov\",{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]}]}],\"endpoint\":{\"url\":\"https://sts.{Region}.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://sts-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://sts.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"sts\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://sts.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" + private 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\"},\"UseGlobalEndpoint\":{\"builtIn\":\"AWS::STS::UseGlobalEndpoint\",\"required\":true,\"default\":false,\"documentation\":\"Whether the global endpoint should be used, rather then the regional endpoint for us-east-1.\",\"type\":\"Boolean\"}},\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]},{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"ap-northeast-1\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"sts\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"ap-south-1\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"sts\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"ap-southeast-1\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"sts\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"ap-southeast-2\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"sts\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"sts\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"ca-central-1\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"sts\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"eu-central-1\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"sts\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"eu-north-1\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"sts\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"eu-west-1\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"sts\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"eu-west-2\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"sts\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"eu-west-3\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"sts\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"sa-east-1\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"sts\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"sts\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-2\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"sts\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-west-1\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"sts\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-west-2\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"sts\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://sts.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"sts\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://sts-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[\"aws-us-gov\",{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]}]}],\"endpoint\":{\"url\":\"https://sts.{Region}.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://sts-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://sts.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://sts.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"sts\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://sts.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSSavingsplans/EndpointResolver.swift b/Sources/Services/AWSSavingsplans/EndpointResolver.swift index 8f79ba33c15..4a72dee1b49 100644 --- a/Sources/Services/AWSSavingsplans/EndpointResolver.swift +++ b/Sources/Services/AWSSavingsplans/EndpointResolver.swift @@ -35,7 +35,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://savingsplans.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"savingsplans\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://savingsplans-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://savingsplans-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://savingsplans.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://savingsplans.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" + private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://savingsplans.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"savingsplans\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://savingsplans-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://savingsplans-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://savingsplans.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://savingsplans.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSShield/EndpointResolver.swift b/Sources/Services/AWSShield/EndpointResolver.swift index 17fc75dc622..a29027a25f0 100644 --- a/Sources/Services/AWSShield/EndpointResolver.swift +++ b/Sources/Services/AWSShield/EndpointResolver.swift @@ -35,7 +35,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://shield.us-east-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"shield\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://shield-fips.us-east-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"shield\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://shield-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://shield-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://shield.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://shield.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" + private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://shield.us-east-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"shield\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://shield-fips.us-east-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"shield\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://shield-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://shield-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://shield.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://shield.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSSupport/EndpointResolver.swift b/Sources/Services/AWSSupport/EndpointResolver.swift index d4b01865ece..7a1e3400ad0 100644 --- a/Sources/Services/AWSSupport/EndpointResolver.swift +++ b/Sources/Services/AWSSupport/EndpointResolver.swift @@ -35,7 +35,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://support.us-east-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"support\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-cn\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://support.cn-north-1.amazonaws.com.cn\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"cn-north-1\",\"signingName\":\"support\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-us-gov\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://support.us-gov-west-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-gov-west-1\",\"signingName\":\"support\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-iso\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://support.us-iso-east-1.c2s.ic.gov\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-iso-east-1\",\"signingName\":\"support\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-iso-b\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://support.us-isob-east-1.sc2s.sgov.gov\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-isob-east-1\",\"signingName\":\"support\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://support-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://support-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://support.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://support.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" + private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://support.us-east-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"support\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-cn\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://support.cn-north-1.amazonaws.com.cn\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"support\",\"signingRegion\":\"cn-north-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-us-gov\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://support.us-gov-west-1.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"support\",\"signingRegion\":\"us-gov-west-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-iso\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://support.us-iso-east-1.c2s.ic.gov\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"support\",\"signingRegion\":\"us-iso-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws-iso-b\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://support.us-isob-east-1.sc2s.sgov.gov\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"support\",\"signingRegion\":\"us-isob-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://support-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://support-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://support.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://support.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSWAF/EndpointResolver.swift b/Sources/Services/AWSWAF/EndpointResolver.swift index 831317b5df2..30e7a9e73dc 100644 --- a/Sources/Services/AWSWAF/EndpointResolver.swift +++ b/Sources/Services/AWSWAF/EndpointResolver.swift @@ -35,7 +35,7 @@ public struct DefaultEndpointResolver: EndpointResolver { private let engine: AWSClientRuntime.AWSEndpointsRuleEngine private let partitions = "{\"version\":\"1.1\",\"partitions\":[{\"id\":\"aws\",\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af)-\\\\w+-\\\\d+$\",\"regions\":{\"af-south-1\":{},\"ap-east-1\":{},\"ap-northeast-1\":{},\"ap-northeast-2\":{},\"ap-northeast-3\":{},\"ap-south-1\":{},\"ap-southeast-1\":{},\"ap-southeast-2\":{},\"ap-southeast-3\":{},\"ca-central-1\":{},\"eu-central-1\":{},\"eu-north-1\":{},\"eu-south-1\":{},\"eu-west-1\":{},\"eu-west-2\":{},\"eu-west-3\":{},\"me-central-1\":{},\"me-south-1\":{},\"sa-east-1\":{},\"us-east-1\":{},\"us-east-2\":{},\"us-west-1\":{},\"us-west-2\":{},\"aws-global\":{}},\"outputs\":{\"name\":\"aws\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-us-gov\",\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"us-gov-west-1\":{},\"us-gov-east-1\":{},\"aws-us-gov-global\":{}},\"outputs\":{\"name\":\"aws-us-gov\",\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-cn\",\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"cn-north-1\":{},\"cn-northwest-1\":{},\"aws-cn-global\":{}},\"outputs\":{\"name\":\"aws-cn\",\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"supportsFIPS\":true,\"supportsDualStack\":true}},{\"id\":\"aws-iso\",\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso\",\"dnsSuffix\":\"c2s.ic.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"c2s.ic.gov\"},\"regions\":{\"us-iso-east-1\":{},\"us-iso-west-1\":{},\"aws-iso-global\":{}}},{\"id\":\"aws-iso-b\",\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"outputs\":{\"name\":\"aws-iso-b\",\"dnsSuffix\":\"sc2s.sgov.gov\",\"supportsFIPS\":true,\"supportsDualStack\":false,\"dualStackDnsSuffix\":\"sc2s.sgov.gov\"},\"regions\":{\"us-isob-east-1\":{},\"aws-iso-b-global\":{}}}]}" - private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://waf.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"waf\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://waf-fips.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingRegion\":\"us-east-1\",\"signingName\":\"waf\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://waf-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://waf-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://waf.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://waf.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" + private 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\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"type\":\"tree\",\"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\"}]}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://waf.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"waf\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]},\"aws\"]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://waf-fips.amazonaws.com\",\"properties\":{\"authSchemes\":[{\"name\":\"sigv4\",\"signingName\":\"waf\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://waf-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://waf-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://waf.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://waf.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]}]},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}]}" public init() throws { engine = try AWSClientRuntime.AWSEndpointsRuleEngine(partitions: partitions, ruleSet: ruleSet) diff --git a/Sources/Services/AWSWAFV2/WAFV2Client.swift b/Sources/Services/AWSWAFV2/WAFV2Client.swift index d661642fba2..b83e6e9bed5 100644 --- a/Sources/Services/AWSWAFV2/WAFV2Client.swift +++ b/Sources/Services/AWSWAFV2/WAFV2Client.swift @@ -130,7 +130,7 @@ public struct WAFV2ClientLogHandlerFactory: ClientRuntime.SDKLogHandlerFactory { } extension WAFV2Client: WAFV2ClientProtocol { - /// Associates a web ACL with a regional application resource, to protect the resource. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. For Amazon CloudFront, don't use this call. Instead, use your CloudFront distribution configuration. To associate a web ACL, in the CloudFront call UpdateDistribution, set the web ACL ID to the Amazon Resource Name (ARN) of the web ACL. For information, see [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html). When you make changes to web ACLs or web ACL components, like rules and rule groups, WAF propagates the changes everywhere that the web ACL and its components are stored and used. Your changes are applied within seconds, but there might be a brief period of inconsistency when the changes have arrived in some places and not in others. So, for example, if you change a rule action setting, the action might be the old action in one area and the new action in another area. Or if you add an IP address to an IP set used in a blocking rule, the new address might briefly be blocked in one area while still allowed in another. This temporary inconsistency can occur when you first associate a web ACL with an Amazon Web Services resource and when you change a web ACL that is already associated with a resource. Generally, any inconsistencies of this type last only a few seconds. + /// Associates a web ACL with a regional application resource, to protect the resource. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. For Amazon CloudFront, don't use this call. Instead, use your CloudFront distribution configuration. To associate a web ACL, in the CloudFront call UpdateDistribution, set the web ACL ID to the Amazon Resource Name (ARN) of the web ACL. For information, see [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html) in the Amazon CloudFront Developer Guide. When you make changes to web ACLs or web ACL components, like rules and rule groups, WAF propagates the changes everywhere that the web ACL and its components are stored and used. Your changes are applied within seconds, but there might be a brief period of inconsistency when the changes have arrived in some places and not in others. So, for example, if you change a rule action setting, the action might be the old action in one area and the new action in another area. Or if you add an IP address to an IP set used in a blocking rule, the new address might briefly be blocked in one area while still allowed in another. This temporary inconsistency can occur when you first associate a web ACL with an Amazon Web Services resource and when you change a web ACL that is already associated with a resource. Generally, any inconsistencies of this type last only a few seconds. public func associateWebACL(input: AssociateWebACLInput) async throws -> AssociateWebACLOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -166,7 +166,7 @@ extension WAFV2Client: WAFV2ClientProtocol { return result } - /// Returns the web ACL capacity unit (WCU) requirements for a specified scope and set of rules. You can use this to check the capacity requirements for the rules you want to use in a [RuleGroup] or [WebACL]. WAF uses WCUs to calculate and control the operating resources that are used to run your rules, rule groups, and web ACLs. WAF calculates capacity differently for each rule type, to reflect the relative cost of each rule. Simple rules that cost little to run use fewer WCUs than more complex rules that use more processing power. Rule group capacity is fixed at creation, which helps users plan their web ACL WCU usage when they use a rule group. The WCU limit for web ACLs is 1,500. + /// Returns the web ACL capacity unit (WCU) requirements for a specified scope and set of rules. You can use this to check the capacity requirements for the rules you want to use in a [RuleGroup] or [WebACL]. WAF uses WCUs to calculate and control the operating resources that are used to run your rules, rule groups, and web ACLs. WAF calculates capacity differently for each rule type, to reflect the relative cost of each rule. Simple rules that cost little to run use fewer WCUs than more complex rules that use more processing power. Rule group capacity is fixed at creation, which helps users plan their web ACL WCU usage when they use a rule group. For more information, see [WAF web ACL capacity units (WCU)](https://docs.aws.amazon.com/waf/latest/developerguide/aws-waf-capacity-units.html) in the WAF Developer Guide. public func checkCapacity(input: CheckCapacityInput) async throws -> CheckCapacityOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -310,7 +310,7 @@ extension WAFV2Client: WAFV2ClientProtocol { return result } - /// Creates a [WebACL] per the specifications provided. A web ACL defines a collection of rules to use to inspect and control web requests. Each rule has an action defined (allow, block, or count) for requests that match the statement of the rule. In the web ACL, you assign a default action to take (allow, block) for any request that does not match any of the rules. The rules in a web ACL can be a combination of the types [Rule], [RuleGroup], and managed rule group. You can associate a web ACL with one or more Amazon Web Services resources to protect. The resources can be an Amazon CloudFront distribution, an Amazon API Gateway REST API, an Application Load Balancer, an AppSync GraphQL API, Amazon Cognito user pool, or an App Runner service. + /// Creates a [WebACL] per the specifications provided. A web ACL defines a collection of rules to use to inspect and control web requests. Each rule has an action defined (allow, block, or count) for requests that match the statement of the rule. In the web ACL, you assign a default action to take (allow, block) for any request that does not match any of the rules. The rules in a web ACL can be a combination of the types [Rule], [RuleGroup], and managed rule group. You can associate a web ACL with one or more Amazon Web Services resources to protect. The resources can be an Amazon CloudFront distribution, an Amazon API Gateway REST API, an Application Load Balancer, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. public func createWebACL(input: CreateWebACLInput) async throws -> CreateWebACLOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -568,7 +568,7 @@ extension WAFV2Client: WAFV2ClientProtocol { /// /// * For regional resources, call [ListResourcesForWebACL]. /// - /// * For Amazon CloudFront distributions, use the CloudFront call ListDistributionsByWebACLId. For information, see [ListDistributionsByWebACLId](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListDistributionsByWebACLId.html). + /// * For Amazon CloudFront distributions, use the CloudFront call ListDistributionsByWebACLId. For information, see [ListDistributionsByWebACLId](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListDistributionsByWebACLId.html) in the Amazon CloudFront API Reference. /// /// /// @@ -577,7 +577,7 @@ extension WAFV2Client: WAFV2ClientProtocol { /// /// * For regional resources, call [DisassociateWebACL]. /// - /// * For Amazon CloudFront distributions, provide an empty web ACL ID in the CloudFront call UpdateDistribution. For information, see [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html). + /// * For Amazon CloudFront distributions, provide an empty web ACL ID in the CloudFront call UpdateDistribution. For information, see [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html) in the Amazon CloudFront API Reference. public func deleteWebACL(input: DeleteWebACLInput) async throws -> DeleteWebACLOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -649,7 +649,7 @@ extension WAFV2Client: WAFV2ClientProtocol { return result } - /// Disassociates the specified regional application resource from any existing web ACL association. A resource can have at most one web ACL association. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. For Amazon CloudFront, don't use this call. Instead, use your CloudFront distribution configuration. To disassociate a web ACL, provide an empty web ACL ID in the CloudFront call UpdateDistribution. For information, see [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html). + /// Disassociates the specified regional application resource from any existing web ACL association. A resource can have at most one web ACL association. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. For Amazon CloudFront, don't use this call. Instead, use your CloudFront distribution configuration. To disassociate a web ACL, provide an empty web ACL ID in the CloudFront call UpdateDistribution. For information, see [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html) in the Amazon CloudFront API Reference. public func disassociateWebACL(input: DisassociateWebACLInput) async throws -> DisassociateWebACLOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1895,7 +1895,7 @@ extension WAFV2Client: WAFV2ClientProtocol { /// * Provide the complete web ACL specification to this call /// /// - /// When you make changes to web ACLs or web ACL components, like rules and rule groups, WAF propagates the changes everywhere that the web ACL and its components are stored and used. Your changes are applied within seconds, but there might be a brief period of inconsistency when the changes have arrived in some places and not in others. So, for example, if you change a rule action setting, the action might be the old action in one area and the new action in another area. Or if you add an IP address to an IP set used in a blocking rule, the new address might briefly be blocked in one area while still allowed in another. This temporary inconsistency can occur when you first associate a web ACL with an Amazon Web Services resource and when you change a web ACL that is already associated with a resource. Generally, any inconsistencies of this type last only a few seconds. A web ACL defines a collection of rules to use to inspect and control web requests. Each rule has an action defined (allow, block, or count) for requests that match the statement of the rule. In the web ACL, you assign a default action to take (allow, block) for any request that does not match any of the rules. The rules in a web ACL can be a combination of the types [Rule], [RuleGroup], and managed rule group. You can associate a web ACL with one or more Amazon Web Services resources to protect. The resources can be an Amazon CloudFront distribution, an Amazon API Gateway REST API, an Application Load Balancer, an AppSync GraphQL API, Amazon Cognito user pool, or an App Runner service. + /// When you make changes to web ACLs or web ACL components, like rules and rule groups, WAF propagates the changes everywhere that the web ACL and its components are stored and used. Your changes are applied within seconds, but there might be a brief period of inconsistency when the changes have arrived in some places and not in others. So, for example, if you change a rule action setting, the action might be the old action in one area and the new action in another area. Or if you add an IP address to an IP set used in a blocking rule, the new address might briefly be blocked in one area while still allowed in another. This temporary inconsistency can occur when you first associate a web ACL with an Amazon Web Services resource and when you change a web ACL that is already associated with a resource. Generally, any inconsistencies of this type last only a few seconds. A web ACL defines a collection of rules to use to inspect and control web requests. Each rule has an action defined (allow, block, or count) for requests that match the statement of the rule. In the web ACL, you assign a default action to take (allow, block) for any request that does not match any of the rules. The rules in a web ACL can be a combination of the types [Rule], [RuleGroup], and managed rule group. You can associate a web ACL with one or more Amazon Web Services resources to protect. The resources can be an Amazon CloudFront distribution, an Amazon API Gateway REST API, an Application Load Balancer, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. public func updateWebACL(input: UpdateWebACLInput) async throws -> UpdateWebACLOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSWAFV2/WAFV2ClientProtocol.swift b/Sources/Services/AWSWAFV2/WAFV2ClientProtocol.swift index c129b9c69d4..d697c4953d5 100644 --- a/Sources/Services/AWSWAFV2/WAFV2ClientProtocol.swift +++ b/Sources/Services/AWSWAFV2/WAFV2ClientProtocol.swift @@ -5,7 +5,7 @@ import ClientRuntime /// WAF This is the latest version of the WAF API, released in November, 2019. The names of the entities that you use to access this API, like endpoints and namespaces, all have the versioning information added, like "V2" or "v2", to distinguish from the prior version. We recommend migrating your resources to this version, because it has a number of significant improvements. If you used WAF prior to this release, you can't use this WAFV2 API to access any WAF resources that you created before. You can access your old rules, web ACLs, and other WAF resources only through the WAF Classic APIs. The WAF Classic APIs have retained the prior names, endpoints, and namespaces. For information, including how to migrate your WAF resources to this version, see the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). WAF is a web application firewall that lets you monitor the HTTP and HTTPS requests that are forwarded to an Amazon CloudFront distribution, Amazon API Gateway REST API, Application Load Balancer, AppSync GraphQL API, Amazon Cognito user pool, or App Runner service. WAF also lets you control access to your content, to protect the Amazon Web Services resource that WAF is monitoring. Based on conditions that you specify, such as the IP addresses that requests originate from or the values of query strings, the protected resource responds to requests with either the requested content, an HTTP 403 status code (Forbidden), or with a custom response. This API guide is for developers who need detailed information about WAF API actions, data types, and errors. For detailed information about WAF features and guidance for configuring and using WAF, see the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/what-is-aws-waf.html). You can make calls using the endpoints listed in [WAF endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/waf.html). /// -/// * For regional applications, you can use any of the endpoints in the list. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. +/// * For regional applications, you can use any of the endpoints in the list. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. /// /// * For Amazon CloudFront applications, you must use the API endpoint listed for US East (N. Virginia): us-east-1. /// @@ -18,9 +18,9 @@ import ClientRuntime /// /// * The limits WAF places on the use of rules more closely reflects the cost of running each type of rule. Rule groups include capacity settings, so you know the maximum cost of a rule group when you use it. public protocol WAFV2ClientProtocol { - /// Associates a web ACL with a regional application resource, to protect the resource. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. For Amazon CloudFront, don't use this call. Instead, use your CloudFront distribution configuration. To associate a web ACL, in the CloudFront call UpdateDistribution, set the web ACL ID to the Amazon Resource Name (ARN) of the web ACL. For information, see [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html). When you make changes to web ACLs or web ACL components, like rules and rule groups, WAF propagates the changes everywhere that the web ACL and its components are stored and used. Your changes are applied within seconds, but there might be a brief period of inconsistency when the changes have arrived in some places and not in others. So, for example, if you change a rule action setting, the action might be the old action in one area and the new action in another area. Or if you add an IP address to an IP set used in a blocking rule, the new address might briefly be blocked in one area while still allowed in another. This temporary inconsistency can occur when you first associate a web ACL with an Amazon Web Services resource and when you change a web ACL that is already associated with a resource. Generally, any inconsistencies of this type last only a few seconds. + /// Associates a web ACL with a regional application resource, to protect the resource. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. For Amazon CloudFront, don't use this call. Instead, use your CloudFront distribution configuration. To associate a web ACL, in the CloudFront call UpdateDistribution, set the web ACL ID to the Amazon Resource Name (ARN) of the web ACL. For information, see [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html) in the Amazon CloudFront Developer Guide. When you make changes to web ACLs or web ACL components, like rules and rule groups, WAF propagates the changes everywhere that the web ACL and its components are stored and used. Your changes are applied within seconds, but there might be a brief period of inconsistency when the changes have arrived in some places and not in others. So, for example, if you change a rule action setting, the action might be the old action in one area and the new action in another area. Or if you add an IP address to an IP set used in a blocking rule, the new address might briefly be blocked in one area while still allowed in another. This temporary inconsistency can occur when you first associate a web ACL with an Amazon Web Services resource and when you change a web ACL that is already associated with a resource. Generally, any inconsistencies of this type last only a few seconds. func associateWebACL(input: AssociateWebACLInput) async throws -> AssociateWebACLOutputResponse - /// Returns the web ACL capacity unit (WCU) requirements for a specified scope and set of rules. You can use this to check the capacity requirements for the rules you want to use in a [RuleGroup] or [WebACL]. WAF uses WCUs to calculate and control the operating resources that are used to run your rules, rule groups, and web ACLs. WAF calculates capacity differently for each rule type, to reflect the relative cost of each rule. Simple rules that cost little to run use fewer WCUs than more complex rules that use more processing power. Rule group capacity is fixed at creation, which helps users plan their web ACL WCU usage when they use a rule group. The WCU limit for web ACLs is 1,500. + /// Returns the web ACL capacity unit (WCU) requirements for a specified scope and set of rules. You can use this to check the capacity requirements for the rules you want to use in a [RuleGroup] or [WebACL]. WAF uses WCUs to calculate and control the operating resources that are used to run your rules, rule groups, and web ACLs. WAF calculates capacity differently for each rule type, to reflect the relative cost of each rule. Simple rules that cost little to run use fewer WCUs than more complex rules that use more processing power. Rule group capacity is fixed at creation, which helps users plan their web ACL WCU usage when they use a rule group. For more information, see [WAF web ACL capacity units (WCU)](https://docs.aws.amazon.com/waf/latest/developerguide/aws-waf-capacity-units.html) in the WAF Developer Guide. func checkCapacity(input: CheckCapacityInput) async throws -> CheckCapacityOutputResponse /// Creates an [IPSet], which you use to identify web requests that originate from specific IP addresses or ranges of IP addresses. For example, if you're receiving a lot of requests from a ranges of IP addresses, you can configure WAF to block them using an IPSet that lists those IP addresses. func createIPSet(input: CreateIPSetInput) async throws -> CreateIPSetOutputResponse @@ -28,7 +28,7 @@ public protocol WAFV2ClientProtocol { func createRegexPatternSet(input: CreateRegexPatternSetInput) async throws -> CreateRegexPatternSetOutputResponse /// Creates a [RuleGroup] per the specifications provided. A rule group defines a collection of rules to inspect and control web requests that you can use in a [WebACL]. When you create a rule group, you define an immutable capacity limit. If you update a rule group, you must stay within the capacity. This allows others to reuse the rule group with confidence in its capacity requirements. func createRuleGroup(input: CreateRuleGroupInput) async throws -> CreateRuleGroupOutputResponse - /// Creates a [WebACL] per the specifications provided. A web ACL defines a collection of rules to use to inspect and control web requests. Each rule has an action defined (allow, block, or count) for requests that match the statement of the rule. In the web ACL, you assign a default action to take (allow, block) for any request that does not match any of the rules. The rules in a web ACL can be a combination of the types [Rule], [RuleGroup], and managed rule group. You can associate a web ACL with one or more Amazon Web Services resources to protect. The resources can be an Amazon CloudFront distribution, an Amazon API Gateway REST API, an Application Load Balancer, an AppSync GraphQL API, Amazon Cognito user pool, or an App Runner service. + /// Creates a [WebACL] per the specifications provided. A web ACL defines a collection of rules to use to inspect and control web requests. Each rule has an action defined (allow, block, or count) for requests that match the statement of the rule. In the web ACL, you assign a default action to take (allow, block) for any request that does not match any of the rules. The rules in a web ACL can be a combination of the types [Rule], [RuleGroup], and managed rule group. You can associate a web ACL with one or more Amazon Web Services resources to protect. The resources can be an Amazon CloudFront distribution, an Amazon API Gateway REST API, an Application Load Balancer, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. func createWebACL(input: CreateWebACLInput) async throws -> CreateWebACLOutputResponse /// Deletes all rule groups that are managed by Firewall Manager for the specified web ACL. You can only use this if ManagedByFirewallManager is false in the specified [WebACL]. func deleteFirewallManagerRuleGroups(input: DeleteFirewallManagerRuleGroupsInput) async throws -> DeleteFirewallManagerRuleGroupsOutputResponse @@ -48,7 +48,7 @@ public protocol WAFV2ClientProtocol { /// /// * For regional resources, call [ListResourcesForWebACL]. /// - /// * For Amazon CloudFront distributions, use the CloudFront call ListDistributionsByWebACLId. For information, see [ListDistributionsByWebACLId](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListDistributionsByWebACLId.html). + /// * For Amazon CloudFront distributions, use the CloudFront call ListDistributionsByWebACLId. For information, see [ListDistributionsByWebACLId](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListDistributionsByWebACLId.html) in the Amazon CloudFront API Reference. /// /// /// @@ -57,11 +57,11 @@ public protocol WAFV2ClientProtocol { /// /// * For regional resources, call [DisassociateWebACL]. /// - /// * For Amazon CloudFront distributions, provide an empty web ACL ID in the CloudFront call UpdateDistribution. For information, see [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html). + /// * For Amazon CloudFront distributions, provide an empty web ACL ID in the CloudFront call UpdateDistribution. For information, see [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html) in the Amazon CloudFront API Reference. func deleteWebACL(input: DeleteWebACLInput) async throws -> DeleteWebACLOutputResponse /// Provides high-level information for a managed rule group, including descriptions of the rules. func describeManagedRuleGroup(input: DescribeManagedRuleGroupInput) async throws -> DescribeManagedRuleGroupOutputResponse - /// Disassociates the specified regional application resource from any existing web ACL association. A resource can have at most one web ACL association. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. For Amazon CloudFront, don't use this call. Instead, use your CloudFront distribution configuration. To disassociate a web ACL, provide an empty web ACL ID in the CloudFront call UpdateDistribution. For information, see [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html). + /// Disassociates the specified regional application resource from any existing web ACL association. A resource can have at most one web ACL association. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. For Amazon CloudFront, don't use this call. Instead, use your CloudFront distribution configuration. To disassociate a web ACL, provide an empty web ACL ID in the CloudFront call UpdateDistribution. For information, see [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html) in the Amazon CloudFront API Reference. func disassociateWebACL(input: DisassociateWebACLInput) async throws -> DisassociateWebACLOutputResponse /// Generates a presigned download URL for the specified release of the mobile SDK. The mobile SDK is not generally available. Customers who have access to the mobile SDK can use it to establish and manage WAF tokens for use in HTTP(S) requests from a mobile device to WAF. For more information, see [WAF client application integration](https://docs.aws.amazon.com/waf/latest/developerguide/waf-application-integration.html) in the WAF Developer Guide. func generateMobileSdkReleaseUrl(input: GenerateMobileSdkReleaseUrlInput) async throws -> GenerateMobileSdkReleaseUrlOutputResponse @@ -185,7 +185,7 @@ public protocol WAFV2ClientProtocol { /// * Provide the complete web ACL specification to this call /// /// - /// When you make changes to web ACLs or web ACL components, like rules and rule groups, WAF propagates the changes everywhere that the web ACL and its components are stored and used. Your changes are applied within seconds, but there might be a brief period of inconsistency when the changes have arrived in some places and not in others. So, for example, if you change a rule action setting, the action might be the old action in one area and the new action in another area. Or if you add an IP address to an IP set used in a blocking rule, the new address might briefly be blocked in one area while still allowed in another. This temporary inconsistency can occur when you first associate a web ACL with an Amazon Web Services resource and when you change a web ACL that is already associated with a resource. Generally, any inconsistencies of this type last only a few seconds. A web ACL defines a collection of rules to use to inspect and control web requests. Each rule has an action defined (allow, block, or count) for requests that match the statement of the rule. In the web ACL, you assign a default action to take (allow, block) for any request that does not match any of the rules. The rules in a web ACL can be a combination of the types [Rule], [RuleGroup], and managed rule group. You can associate a web ACL with one or more Amazon Web Services resources to protect. The resources can be an Amazon CloudFront distribution, an Amazon API Gateway REST API, an Application Load Balancer, an AppSync GraphQL API, Amazon Cognito user pool, or an App Runner service. + /// When you make changes to web ACLs or web ACL components, like rules and rule groups, WAF propagates the changes everywhere that the web ACL and its components are stored and used. Your changes are applied within seconds, but there might be a brief period of inconsistency when the changes have arrived in some places and not in others. So, for example, if you change a rule action setting, the action might be the old action in one area and the new action in another area. Or if you add an IP address to an IP set used in a blocking rule, the new address might briefly be blocked in one area while still allowed in another. This temporary inconsistency can occur when you first associate a web ACL with an Amazon Web Services resource and when you change a web ACL that is already associated with a resource. Generally, any inconsistencies of this type last only a few seconds. A web ACL defines a collection of rules to use to inspect and control web requests. Each rule has an action defined (allow, block, or count) for requests that match the statement of the rule. In the web ACL, you assign a default action to take (allow, block) for any request that does not match any of the rules. The rules in a web ACL can be a combination of the types [Rule], [RuleGroup], and managed rule group. You can associate a web ACL with one or more Amazon Web Services resources to protect. The resources can be an Amazon CloudFront distribution, an Amazon API Gateway REST API, an Application Load Balancer, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. func updateWebACL(input: UpdateWebACLInput) async throws -> UpdateWebACLOutputResponse } diff --git a/Sources/Services/AWSWAFV2/models/Models.swift b/Sources/Services/AWSWAFV2/models/Models.swift index eb541e43a9e..a82329f8018 100644 --- a/Sources/Services/AWSWAFV2/models/Models.swift +++ b/Sources/Services/AWSWAFV2/models/Models.swift @@ -80,7 +80,7 @@ extension WAFV2ClientTypes.AWSManagedRulesBotControlRuleSet: Swift.Codable { extension WAFV2ClientTypes { /// Details for your use of the Bot Control managed rule group, AWSManagedRulesBotControlRuleSet. This configuration is used in ManagedRuleGroupConfig. public struct AWSManagedRulesBotControlRuleSet: Swift.Equatable { - /// The inspection level to use for the Bot Control rule group. The common level is the least expensive. The targeted level includes all common level rules and adds rules with more advanced inspection criteria. For details, see [WAF Bot Control rule group](https://docs.aws.amazon.com/waf/latest/developerguide/aws-managed-rule-groups-bot.html). + /// The inspection level to use for the Bot Control rule group. The common level is the least expensive. The targeted level includes all common level rules and adds rules with more advanced inspection criteria. For details, see [WAF Bot Control rule group](https://docs.aws.amazon.com/waf/latest/developerguide/aws-managed-rule-groups-bot.html) in the WAF Developer Guide. /// This member is required. public var inspectionLevel: WAFV2ClientTypes.InspectionLevel? @@ -236,7 +236,7 @@ extension WAFV2ClientTypes.AllowAction: Swift.Codable { extension WAFV2ClientTypes { /// Specifies that WAF should allow the request and optionally defines additional custom handling for the request. This is used in the context of other settings, for example to specify values for [RuleAction] and web ACL [DefaultAction]. public struct AllowAction: Swift.Equatable { - /// Defines custom handling for the web request. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). + /// Defines custom handling for the web request. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the WAF Developer Guide. public var customRequestHandling: WAFV2ClientTypes.CustomRequestHandling? public init ( @@ -323,15 +323,15 @@ extension AssociateWebACLInput: ClientRuntime.URLPathProvider { public struct AssociateWebACLInput: Swift.Equatable { /// The Amazon Resource Name (ARN) of the resource to associate with the web ACL. The ARN must be in one of the following formats: /// - /// * For an Application Load Balancer: arn:aws:elasticloadbalancing:region:account-id:loadbalancer/app/load-balancer-name/load-balancer-id + /// * For an Application Load Balancer: arn:partition:elasticloadbalancing:region:account-id:loadbalancer/app/load-balancer-name/load-balancer-id /// - /// * For an Amazon API Gateway REST API: arn:aws:apigateway:region::/restapis/api-id/stages/stage-name + /// * For an Amazon API Gateway REST API: arn:partition:apigateway:region::/restapis/api-id/stages/stage-name /// - /// * For an AppSync GraphQL API: arn:aws:appsync:region:account-id:apis/GraphQLApiId + /// * For an AppSync GraphQL API: arn:partition:appsync:region:account-id:apis/GraphQLApiId /// - /// * For an Amazon Cognito user pool: arn:aws:cognito-idp:region:account-id:userpool/user-pool-id + /// * For an Amazon Cognito user pool: arn:partition:cognito-idp:region:account-id:userpool/user-pool-id /// - /// * For an App Runner service: arn:aws:apprunner:region:account-id:service/apprunner-service-name/apprunner-service-id + /// * For an App Runner service: arn:partition:apprunner:region:account-id:service/apprunner-service-name/apprunner-service-id /// This member is required. public var resourceArn: Swift.String? /// The Amazon Resource Name (ARN) of the web ACL that you want to associate with the resource. @@ -408,6 +408,82 @@ public struct AssociateWebACLOutputResponse: Swift.Equatable { public init () { } } +extension WAFV2ClientTypes { + public enum AssociatedResourceType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case cloudfront + case sdkUnknown(Swift.String) + + public static var allCases: [AssociatedResourceType] { + return [ + .cloudfront, + .sdkUnknown("") + ] + } + 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 .cloudfront: return "CLOUDFRONT" + case let .sdkUnknown(s): return s + } + } + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = AssociatedResourceType(rawValue: rawValue) ?? AssociatedResourceType.sdkUnknown(rawValue) + } + } +} + +extension WAFV2ClientTypes.AssociationConfig: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case requestBody = "RequestBody" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let requestBody = requestBody { + var requestBodyContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .requestBody) + for (dictKey0, requestBody0) in requestBody { + try requestBodyContainer.encode(requestBody0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + } + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let requestBodyContainer = try containerValues.decodeIfPresent([Swift.String: WAFV2ClientTypes.RequestBodyAssociatedResourceTypeConfig?].self, forKey: .requestBody) + var requestBodyDecoded0: [Swift.String:WAFV2ClientTypes.RequestBodyAssociatedResourceTypeConfig]? = nil + if let requestBodyContainer = requestBodyContainer { + requestBodyDecoded0 = [Swift.String:WAFV2ClientTypes.RequestBodyAssociatedResourceTypeConfig]() + for (key0, requestbodyassociatedresourcetypeconfig0) in requestBodyContainer { + if let requestbodyassociatedresourcetypeconfig0 = requestbodyassociatedresourcetypeconfig0 { + requestBodyDecoded0?[key0] = requestbodyassociatedresourcetypeconfig0 + } + } + } + requestBody = requestBodyDecoded0 + } +} + +extension WAFV2ClientTypes { + /// Specifies custom configurations for the associations between the web ACL and protected resources. Use this to customize the maximum size of the request body that your protected CloudFront distributions forward to WAF for inspection. The default is 16 KB (16,384 kilobytes). You are charged additional fees when your protected resources forward body sizes that are larger than the default. For more information, see [WAF Pricing](http://aws.amazon.com/waf/pricing/). + public struct AssociationConfig: Swift.Equatable { + /// Customizes the maximum size of the request body that your protected CloudFront distributions forward to WAF for inspection. The default size is 16 KB (16,384 kilobytes). You are charged additional fees when your protected resources forward body sizes that are larger than the default. For more information, see [WAF Pricing](http://aws.amazon.com/waf/pricing/). + public var requestBody: [Swift.String:WAFV2ClientTypes.RequestBodyAssociatedResourceTypeConfig]? + + public init ( + requestBody: [Swift.String:WAFV2ClientTypes.RequestBodyAssociatedResourceTypeConfig]? = nil + ) + { + self.requestBody = requestBody + } + } + +} + extension WAFV2ClientTypes.BlockAction: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case customResponse = "CustomResponse" @@ -430,7 +506,7 @@ extension WAFV2ClientTypes.BlockAction: Swift.Codable { extension WAFV2ClientTypes { /// Specifies that WAF should block the request and optionally defines additional custom handling for the response to the web request. This is used in the context of other settings, for example to specify values for [RuleAction] and web ACL [DefaultAction]. public struct BlockAction: Swift.Equatable { - /// Defines a custom response for the web request. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). + /// Defines a custom response for the web request. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the WAF Developer Guide. public var customResponse: WAFV2ClientTypes.CustomResponse? public init ( @@ -465,7 +541,7 @@ extension WAFV2ClientTypes.Body: Swift.Codable { extension WAFV2ClientTypes { /// Inspect the body of the web request. The body immediately follows the request headers. This is used to indicate the web request component to inspect, in the [FieldToMatch] specification. public struct Body: Swift.Equatable { - /// What WAF should do if the body is larger than WAF can inspect. WAF does not support inspecting the entire contents of the body of a web request when the body exceeds 8 KB (8192 bytes). Only the first 8 KB of the request body are forwarded to WAF by the underlying host service. The options for oversize handling are the following: + /// What WAF should do if the body is larger than WAF can inspect. WAF does not support inspecting the entire contents of the web request body if the body exceeds the limit for the resource type. If the body is larger than the limit, the underlying host service only forwards the contents that are below the limit to WAF for inspection. The default limit is 8 KB (8,192 kilobytes) for regional resources and 16 KB (16,384 kilobytes) for CloudFront distributions. For CloudFront distributions, you can increase the limit in the web ACL AssociationConfig, for additional processing fees. The options for oversize handling are the following: /// /// * CONTINUE - Inspect the body normally, according to the rule inspection criteria. /// @@ -474,7 +550,7 @@ extension WAFV2ClientTypes { /// * NO_MATCH - Treat the web request as not matching the rule statement. /// /// - /// You can combine the MATCH or NO_MATCH settings for oversize handling with your rule and web ACL action settings, so that you block any request whose body is over 8 KB. Default: CONTINUE + /// You can combine the MATCH or NO_MATCH settings for oversize handling with your rule and web ACL action settings, so that you block any request whose body is over the limit. Default: CONTINUE public var oversizeHandling: WAFV2ClientTypes.OversizeHandling? public init ( @@ -655,7 +731,7 @@ extension WAFV2ClientTypes { /// /// You can configure the expiration time in the CaptchaConfigImmunityTimeProperty setting at the rule and web ACL level. The rule setting overrides the web ACL setting. This action option is available for rules. It isn't available for web ACL default actions. public struct CaptchaAction: Swift.Equatable { - /// Defines custom handling for the web request, used when the CAPTCHA inspection determines that the request's token is valid and unexpired. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). + /// Defines custom handling for the web request, used when the CAPTCHA inspection determines that the request's token is valid and unexpired. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the WAF Developer Guide. public var customRequestHandling: WAFV2ClientTypes.CustomRequestHandling? public init ( @@ -796,7 +872,7 @@ extension WAFV2ClientTypes { /// /// You can configure the expiration time in the ChallengeConfigImmunityTimeProperty setting at the rule and web ACL level. The rule setting overrides the web ACL setting. This action option is available for rules. It isn't available for web ACL default actions. public struct ChallengeAction: Swift.Equatable { - /// Defines custom handling for the web request, used when the challenge inspection determines that the request's token is valid and unexpired. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). + /// Defines custom handling for the web request, used when the challenge inspection determines that the request's token is valid and unexpired. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the WAF Developer Guide. public var customRequestHandling: WAFV2ClientTypes.CustomRequestHandling? public init ( @@ -929,7 +1005,7 @@ public struct CheckCapacityInput: Swift.Equatable { /// An array of [Rule] that you're configuring to use in a rule group or web ACL. /// This member is required. public var rules: [WAFV2ClientTypes.Rule]? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -1309,7 +1385,7 @@ extension WAFV2ClientTypes.CountAction: Swift.Codable { extension WAFV2ClientTypes { /// Specifies that WAF should count the request. Optionally defines additional custom handling for the request. This is used in the context of other settings, for example to specify values for [RuleAction] and web ACL [DefaultAction]. public struct CountAction: Swift.Equatable { - /// Defines custom handling for the web request. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). + /// Defines custom handling for the web request. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the WAF Developer Guide. public var customRequestHandling: WAFV2ClientTypes.CustomRequestHandling? public init ( @@ -2174,7 +2250,7 @@ public struct CreateIPSetInput: Swift.Equatable { /// The name of the IP set. You cannot change the name of an IPSet after you create it. /// This member is required. public var name: Swift.String? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -2383,7 +2459,7 @@ public struct CreateRegexPatternSetInput: Swift.Equatable { /// Array of regular expression strings. /// This member is required. public var regularExpressionList: [WAFV2ClientTypes.Regex]? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -2593,10 +2669,10 @@ extension CreateRuleGroupInput: ClientRuntime.URLPathProvider { } public struct CreateRuleGroupInput: Swift.Equatable { - /// The web ACL capacity units (WCUs) required for this rule group. When you create your own rule group, you define this, and you cannot change it after creation. When you add or modify the rules in a rule group, WAF enforces this limit. You can check the capacity for a set of rules using [CheckCapacity]. WAF uses WCUs to calculate and control the operating resources that are used to run your rules, rule groups, and web ACLs. WAF calculates capacity differently for each rule type, to reflect the relative cost of each rule. Simple rules that cost little to run use fewer WCUs than more complex rules that use more processing power. Rule group capacity is fixed at creation, which helps users plan their web ACL WCU usage when they use a rule group. The WCU limit for web ACLs is 1,500. + /// The web ACL capacity units (WCUs) required for this rule group. When you create your own rule group, you define this, and you cannot change it after creation. When you add or modify the rules in a rule group, WAF enforces this limit. You can check the capacity for a set of rules using [CheckCapacity]. WAF uses WCUs to calculate and control the operating resources that are used to run your rules, rule groups, and web ACLs. WAF calculates capacity differently for each rule type, to reflect the relative cost of each rule. Simple rules that cost little to run use fewer WCUs than more complex rules that use more processing power. Rule group capacity is fixed at creation, which helps users plan their web ACL WCU usage when they use a rule group. For more information, see [WAF web ACL capacity units (WCU)](https://docs.aws.amazon.com/waf/latest/developerguide/aws-waf-capacity-units.html) in the WAF Developer Guide. /// This member is required. public var capacity: Swift.Int? - /// A map of custom response keys and content bodies. When you create a rule with a block action, you can send a custom response to the web request. You define these for the rule group, and then use them in the rules that you define in the rule group. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). For information about the limits on count and size for custom request and response settings, see [WAF quotas](https://docs.aws.amazon.com/waf/latest/developerguide/limits.html) in the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). + /// A map of custom response keys and content bodies. When you create a rule with a block action, you can send a custom response to the web request. You define these for the rule group, and then use them in the rules that you define in the rule group. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the WAF Developer Guide. For information about the limits on count and size for custom request and response settings, see [WAF quotas](https://docs.aws.amazon.com/waf/latest/developerguide/limits.html) in the WAF Developer Guide. public var customResponseBodies: [Swift.String:WAFV2ClientTypes.CustomResponseBody]? /// A description of the rule group that helps with identification. public var description: Swift.String? @@ -2605,7 +2681,7 @@ public struct CreateRuleGroupInput: Swift.Equatable { public var name: Swift.String? /// The [Rule] statements used to identify the web requests that you want to allow, block, or count. Each rule includes one top-level statement that WAF uses to identify matching web requests, and parameters that govern how WAF handles them. public var rules: [WAFV2ClientTypes.Rule]? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -2796,6 +2872,7 @@ extension CreateRuleGroupOutputResponseBody: Swift.Decodable { extension CreateWebACLInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case associationConfig = "AssociationConfig" case captchaConfig = "CaptchaConfig" case challengeConfig = "ChallengeConfig" case customResponseBodies = "CustomResponseBodies" @@ -2811,6 +2888,9 @@ extension CreateWebACLInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let associationConfig = self.associationConfig { + try encodeContainer.encode(associationConfig, forKey: .associationConfig) + } if let captchaConfig = self.captchaConfig { try encodeContainer.encode(captchaConfig, forKey: .captchaConfig) } @@ -2866,11 +2946,13 @@ extension CreateWebACLInput: ClientRuntime.URLPathProvider { } public struct CreateWebACLInput: Swift.Equatable { + /// Specifies custom configurations for the associations between the web ACL and protected resources. Use this to customize the maximum size of the request body that your protected CloudFront distributions forward to WAF for inspection. The default is 16 KB (16,384 kilobytes). You are charged additional fees when your protected resources forward body sizes that are larger than the default. For more information, see [WAF Pricing](http://aws.amazon.com/waf/pricing/). + public var associationConfig: WAFV2ClientTypes.AssociationConfig? /// Specifies how WAF should handle CAPTCHA evaluations for rules that don't have their own CaptchaConfig settings. If you don't specify this, WAF uses its default settings for CaptchaConfig. public var captchaConfig: WAFV2ClientTypes.CaptchaConfig? /// Specifies how WAF should handle challenge evaluations for rules that don't have their own ChallengeConfig settings. If you don't specify this, WAF uses its default settings for ChallengeConfig. public var challengeConfig: WAFV2ClientTypes.ChallengeConfig? - /// A map of custom response keys and content bodies. When you create a rule with a block action, you can send a custom response to the web request. You define these for the web ACL, and then use them in the rules and default actions that you define in the web ACL. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). For information about the limits on count and size for custom request and response settings, see [WAF quotas](https://docs.aws.amazon.com/waf/latest/developerguide/limits.html) in the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). + /// A map of custom response keys and content bodies. When you create a rule with a block action, you can send a custom response to the web request. You define these for the web ACL, and then use them in the rules and default actions that you define in the web ACL. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the WAF Developer Guide. For information about the limits on count and size for custom request and response settings, see [WAF quotas](https://docs.aws.amazon.com/waf/latest/developerguide/limits.html) in the WAF Developer Guide. public var customResponseBodies: [Swift.String:WAFV2ClientTypes.CustomResponseBody]? /// The action to perform if none of the Rules contained in the WebACL match. /// This member is required. @@ -2882,7 +2964,7 @@ public struct CreateWebACLInput: Swift.Equatable { public var name: Swift.String? /// The [Rule] statements used to identify the web requests that you want to allow, block, or count. Each rule includes one top-level statement that WAF uses to identify matching web requests, and parameters that govern how WAF handles them. public var rules: [WAFV2ClientTypes.Rule]? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -2898,6 +2980,7 @@ public struct CreateWebACLInput: Swift.Equatable { public var visibilityConfig: WAFV2ClientTypes.VisibilityConfig? public init ( + associationConfig: WAFV2ClientTypes.AssociationConfig? = nil, captchaConfig: WAFV2ClientTypes.CaptchaConfig? = nil, challengeConfig: WAFV2ClientTypes.ChallengeConfig? = nil, customResponseBodies: [Swift.String:WAFV2ClientTypes.CustomResponseBody]? = nil, @@ -2911,6 +2994,7 @@ public struct CreateWebACLInput: Swift.Equatable { visibilityConfig: WAFV2ClientTypes.VisibilityConfig? = nil ) { + self.associationConfig = associationConfig self.captchaConfig = captchaConfig self.challengeConfig = challengeConfig self.customResponseBodies = customResponseBodies @@ -2937,10 +3021,12 @@ struct CreateWebACLInputBody: Swift.Equatable { let captchaConfig: WAFV2ClientTypes.CaptchaConfig? let challengeConfig: WAFV2ClientTypes.ChallengeConfig? let tokenDomains: [Swift.String]? + let associationConfig: WAFV2ClientTypes.AssociationConfig? } extension CreateWebACLInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case associationConfig = "AssociationConfig" case captchaConfig = "CaptchaConfig" case challengeConfig = "ChallengeConfig" case customResponseBodies = "CustomResponseBodies" @@ -3014,6 +3100,8 @@ extension CreateWebACLInputBody: Swift.Decodable { } } tokenDomains = tokenDomainsDecoded0 + let associationConfigDecoded = try containerValues.decodeIfPresent(WAFV2ClientTypes.AssociationConfig.self, forKey: .associationConfig) + associationConfig = associationConfigDecoded } } @@ -3185,9 +3273,9 @@ extension WAFV2ClientTypes.CustomRequestHandling: Swift.Codable { } extension WAFV2ClientTypes { - /// Custom request handling behavior that inserts custom headers into a web request. You can add custom request handling for WAF to use when the rule action doesn't block the request. For example, CaptchaAction for requests with valid t okens, and AllowAction. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). + /// Custom request handling behavior that inserts custom headers into a web request. You can add custom request handling for WAF to use when the rule action doesn't block the request. For example, CaptchaAction for requests with valid t okens, and AllowAction. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the WAF Developer Guide. public struct CustomRequestHandling: Swift.Equatable { - /// The HTTP headers to insert into the request. Duplicate header names are not allowed. For information about the limits on count and size for custom request and response settings, see [WAF quotas](https://docs.aws.amazon.com/waf/latest/developerguide/limits.html) in the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). + /// The HTTP headers to insert into the request. Duplicate header names are not allowed. For information about the limits on count and size for custom request and response settings, see [WAF quotas](https://docs.aws.amazon.com/waf/latest/developerguide/limits.html) in the WAF Developer Guide. /// This member is required. public var insertHeaders: [WAFV2ClientTypes.CustomHTTPHeader]? @@ -3245,14 +3333,14 @@ extension WAFV2ClientTypes.CustomResponse: Swift.Codable { } extension WAFV2ClientTypes { - /// A custom response to send to the client. You can define a custom response for rule actions and default web ACL actions that are set to [BlockAction]. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). + /// A custom response to send to the client. You can define a custom response for rule actions and default web ACL actions that are set to [BlockAction]. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the WAF Developer Guide. public struct CustomResponse: Swift.Equatable { /// References the response body that you want WAF to return to the web request client. You can define a custom response for a rule action or a default web ACL action that is set to block. To do this, you first define the response body key and value in the CustomResponseBodies setting for the [WebACL] or [RuleGroup] where you want to use it. Then, in the rule action or web ACL default action BlockAction setting, you reference the response body using this key. public var customResponseBodyKey: Swift.String? - /// The HTTP status code to return to the client. For a list of status codes that you can use in your custom responses, see [Supported status codes for custom response](https://docs.aws.amazon.com/waf/latest/developerguide/customizing-the-response-status-codes.html) in the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). + /// The HTTP status code to return to the client. For a list of status codes that you can use in your custom responses, see [Supported status codes for custom response](https://docs.aws.amazon.com/waf/latest/developerguide/customizing-the-response-status-codes.html) in the WAF Developer Guide. /// This member is required. public var responseCode: Swift.Int? - /// The HTTP headers to use in the response. Duplicate header names are not allowed. For information about the limits on count and size for custom request and response settings, see [WAF quotas](https://docs.aws.amazon.com/waf/latest/developerguide/limits.html) in the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). + /// The HTTP headers to use in the response. Duplicate header names are not allowed. For information about the limits on count and size for custom request and response settings, see [WAF quotas](https://docs.aws.amazon.com/waf/latest/developerguide/limits.html) in the WAF Developer Guide. public var responseHeaders: [WAFV2ClientTypes.CustomHTTPHeader]? public init ( @@ -3297,7 +3385,7 @@ extension WAFV2ClientTypes.CustomResponseBody: Swift.Codable { extension WAFV2ClientTypes { /// The response body to use in a custom response to a web request. This is referenced by key from [CustomResponse]CustomResponseBodyKey. public struct CustomResponseBody: Swift.Equatable { - /// The payload of the custom response. You can use JSON escape strings in JSON content. To do this, you must specify JSON content in the ContentType setting. For information about the limits on count and size for custom request and response settings, see [WAF quotas](https://docs.aws.amazon.com/waf/latest/developerguide/limits.html) in the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). + /// The payload of the custom response. You can use JSON escape strings in JSON content. To do this, you must specify JSON content in the ContentType setting. For information about the limits on count and size for custom request and response settings, see [WAF quotas](https://docs.aws.amazon.com/waf/latest/developerguide/limits.html) in the WAF Developer Guide. /// This member is required. public var content: Swift.String? /// The type of content in the payload that you are defining in the Content string. @@ -3534,7 +3622,7 @@ public struct DeleteIPSetInput: Swift.Equatable { /// The name of the IP set. You cannot change the name of an IPSet after you create it. /// This member is required. public var name: Swift.String? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -3843,7 +3931,7 @@ public struct DeleteRegexPatternSetInput: Swift.Equatable { /// The name of the set. You cannot change the name after you create the set. /// This member is required. public var name: Swift.String? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -3980,7 +4068,7 @@ public struct DeleteRuleGroupInput: Swift.Equatable { /// The name of the rule group. You cannot change the name of a rule group after you create it. /// This member is required. public var name: Swift.String? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -4117,7 +4205,7 @@ public struct DeleteWebACLInput: Swift.Equatable { /// The name of the web ACL. You cannot change the name of a web ACL after you create it. /// This member is required. public var name: Swift.String? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -4248,7 +4336,7 @@ public struct DescribeManagedRuleGroupInput: Swift.Equatable { /// The name of the managed rule group. You use this, along with the vendor name, to identify the rule group. /// This member is required. public var name: Swift.String? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -4363,7 +4451,7 @@ extension DescribeManagedRuleGroupOutputResponse: ClientRuntime.HttpResponseBind public struct DescribeManagedRuleGroupOutputResponse: Swift.Equatable { /// The labels that one or more rules in this rule group add to matching web requests. These labels are defined in the RuleLabels for a [Rule]. public var availableLabels: [WAFV2ClientTypes.LabelSummary]? - /// The web ACL capacity units (WCUs) required for this rule group. WAF uses web ACL capacity units (WCU) to calculate and control the operating resources that are used to run your rules, rule groups, and web ACLs. WAF calculates capacity differently for each rule type, to reflect each rule's relative cost. Rule group capacity is fixed at creation, so users can plan their web ACL WCU usage when they use a rule group. The WCU limit for web ACLs is 1,500. + /// The web ACL capacity units (WCUs) required for this rule group. WAF uses WCUs to calculate and control the operating resources that are used to run your rules, rule groups, and web ACLs. WAF calculates capacity differently for each rule type, to reflect the relative cost of each rule. Simple rules that cost little to run use fewer WCUs than more complex rules that use more processing power. Rule group capacity is fixed at creation, which helps users plan their web ACL WCU usage when they use a rule group. For more information, see [WAF web ACL capacity units (WCU)](https://docs.aws.amazon.com/waf/latest/developerguide/aws-waf-capacity-units.html) in the WAF Developer Guide. public var capacity: Swift.Int /// The labels that one or more rules in this rule group match against in label match statements. These labels are defined in a LabelMatchStatement specification, in the [Statement] definition of a rule. public var consumedLabels: [WAFV2ClientTypes.LabelSummary]? @@ -4489,15 +4577,15 @@ extension DisassociateWebACLInput: ClientRuntime.URLPathProvider { public struct DisassociateWebACLInput: Swift.Equatable { /// The Amazon Resource Name (ARN) of the resource to disassociate from the web ACL. The ARN must be in one of the following formats: /// - /// * For an Application Load Balancer: arn:aws:elasticloadbalancing:region:account-id:loadbalancer/app/load-balancer-name/load-balancer-id + /// * For an Application Load Balancer: arn:partition:elasticloadbalancing:region:account-id:loadbalancer/app/load-balancer-name/load-balancer-id /// - /// * For an Amazon API Gateway REST API: arn:aws:apigateway:region::/restapis/api-id/stages/stage-name + /// * For an Amazon API Gateway REST API: arn:partition:apigateway:region::/restapis/api-id/stages/stage-name /// - /// * For an AppSync GraphQL API: arn:aws:appsync:region:account-id:apis/GraphQLApiId + /// * For an AppSync GraphQL API: arn:partition:appsync:region:account-id:apis/GraphQLApiId /// - /// * For an Amazon Cognito user pool: arn:aws:cognito-idp:region:account-id:userpool/user-pool-id + /// * For an Amazon Cognito user pool: arn:partition:cognito-idp:region:account-id:userpool/user-pool-id /// - /// * For an App Runner service: arn:aws:apprunner:region:account-id:service/apprunner-service-name/apprunner-service-id + /// * For an App Runner service: arn:partition:apprunner:region:account-id:service/apprunner-service-name/apprunner-service-id /// This member is required. public var resourceArn: Swift.String? @@ -4747,13 +4835,13 @@ extension WAFV2ClientTypes { public struct FieldToMatch: Swift.Equatable { /// Inspect all query arguments. public var allQueryArguments: WAFV2ClientTypes.AllQueryArguments? - /// Inspect the request body as plain text. The request body immediately follows the request headers. This is the part of a request that contains any additional data that you want to send to your web server as the HTTP request body, such as data from a form. Only the first 8 KB (8192 bytes) of the request body are forwarded to WAF for inspection by the underlying host service. For information about how to handle oversized request bodies, see the Body object configuration. + /// Inspect the request body as plain text. The request body immediately follows the request headers. This is the part of a request that contains any additional data that you want to send to your web server as the HTTP request body, such as data from a form. A limited amount of the request body is forwarded to WAF for inspection by the underlying host service. For regional resources, the limit is 8 KB (8,192 kilobytes) and for CloudFront distributions, the limit is 16 KB (16,384 kilobytes). For CloudFront distributions, you can increase the limit in the web ACL's AssociationConfig, for additional processing fees. For information about how to handle oversized request bodies, see the Body object configuration. public var body: WAFV2ClientTypes.Body? /// Inspect the request cookies. You must configure scope and pattern matching filters in the Cookies object, to define the set of cookies and the parts of the cookies that WAF inspects. Only the first 8 KB (8192 bytes) of a request's cookies and only the first 200 cookies are forwarded to WAF for inspection by the underlying host service. You must configure how to handle any oversize cookie content in the Cookies object. WAF applies the pattern matching filters to the cookies that it receives from the underlying host service. public var cookies: WAFV2ClientTypes.Cookies? /// Inspect the request headers. You must configure scope and pattern matching filters in the Headers object, to define the set of headers to and the parts of the headers that WAF inspects. Only the first 8 KB (8192 bytes) of a request's headers and only the first 200 headers are forwarded to WAF for inspection by the underlying host service. You must configure how to handle any oversize header content in the Headers object. WAF applies the pattern matching filters to the headers that it receives from the underlying host service. public var headers: WAFV2ClientTypes.Headers? - /// Inspect the request body as JSON. The request body immediately follows the request headers. This is the part of a request that contains any additional data that you want to send to your web server as the HTTP request body, such as data from a form. Only the first 8 KB (8192 bytes) of the request body are forwarded to WAF for inspection by the underlying host service. For information about how to handle oversized request bodies, see the JsonBody object configuration. + /// Inspect the request body as JSON. The request body immediately follows the request headers. This is the part of a request that contains any additional data that you want to send to your web server as the HTTP request body, such as data from a form. A limited amount of the request body is forwarded to WAF for inspection by the underlying host service. For regional resources, the limit is 8 KB (8,192 kilobytes) and for CloudFront distributions, the limit is 16 KB (16,384 kilobytes). For CloudFront distributions, you can increase the limit in the web ACL's AssociationConfig, for additional processing fees. For information about how to handle oversized request bodies, see the JsonBody object configuration. public var jsonBody: WAFV2ClientTypes.JsonBody? /// Inspect the HTTP method. The method indicates the type of operation that the request is asking the origin to perform. public var method: WAFV2ClientTypes.Method? @@ -5034,11 +5122,11 @@ extension WAFV2ClientTypes.FirewallManagerStatement: Swift.Codable { } extension WAFV2ClientTypes { - /// The processing guidance for an Firewall Manager rule. This is like a regular rule [Statement], but it can only contain a rule group reference. + /// The processing guidance for an Firewall Manager rule. This is like a regular rule [Statement], but it can only contain a single rule group reference. public struct FirewallManagerStatement: Swift.Equatable { - /// A rule statement used to run the rules that are defined in a managed rule group. To use this, provide the vendor name and the name of the rule group in this statement. You can retrieve the required names by calling [ListAvailableManagedRuleGroups]. You cannot nest a ManagedRuleGroupStatement, for example for use inside a NotStatement or OrStatement. It can only be referenced as a top-level statement within a rule. You are charged additional fees when you use the WAF Bot Control managed rule group AWSManagedRulesBotControlRuleSet or the WAF Fraud Control account takeover prevention (ATP) managed rule group AWSManagedRulesATPRuleSet. For more information, see [WAF Pricing](http://aws.amazon.com/waf/pricing/). + /// A statement used by Firewall Manager to run the rules that are defined in a managed rule group. This is managed by Firewall Manager for an Firewall Manager WAF policy. public var managedRuleGroupStatement: WAFV2ClientTypes.ManagedRuleGroupStatement? - /// A rule statement used to run the rules that are defined in a [RuleGroup]. To use this, create a rule group with your rules, then provide the ARN of the rule group in this statement. You cannot nest a RuleGroupReferenceStatement, for example for use inside a NotStatement or OrStatement. You can only use a rule group reference statement at the top level inside a web ACL. + /// A statement used by Firewall Manager to run the rules that are defined in a rule group. This is managed by Firewall Manager for an Firewall Manager WAF policy. public var ruleGroupReferenceStatement: WAFV2ClientTypes.RuleGroupReferenceStatement? public init ( @@ -5367,7 +5455,7 @@ public struct GetIPSetInput: Swift.Equatable { /// The name of the IP set. You cannot change the name of an IPSet after you create it. /// This member is required. public var name: Swift.String? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -5641,7 +5729,7 @@ public struct GetManagedRuleSetInput: Swift.Equatable { /// The name of the managed rule set. You use this, along with the rule set ID, to identify the rule set. This name is assigned to the corresponding managed rule group, which your customers can access and use. /// This member is required. public var name: Swift.String? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -6050,7 +6138,7 @@ public struct GetRateBasedStatementManagedKeysInput: Swift.Equatable { /// The name of the rate-based rule to get the keys for. If you have the rule defined inside a rule group that you're using in your web ACL, also provide the name of the rule group reference statement in the request parameter RuleGroupRuleName. /// This member is required. public var ruleName: Swift.String? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -6225,7 +6313,7 @@ public struct GetRegexPatternSetInput: Swift.Equatable { /// The name of the set. You cannot change the name after you create the set. /// This member is required. public var name: Swift.String? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -6386,7 +6474,7 @@ public struct GetRuleGroupInput: Swift.Equatable { public var id: Swift.String? /// The name of the rule group. You cannot change the name of a rule group after you create it. public var name: Swift.String? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -6556,7 +6644,7 @@ public struct GetSampledRequestsInput: Swift.Equatable { /// The metric name assigned to the Rule or RuleGroup dimension for which you want a sample of requests. /// This member is required. public var ruleMetricName: Swift.String? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -6736,15 +6824,15 @@ extension GetWebACLForResourceInput: ClientRuntime.URLPathProvider { public struct GetWebACLForResourceInput: Swift.Equatable { /// The Amazon Resource Name (ARN) of the resource whose web ACL you want to retrieve. The ARN must be in one of the following formats: /// - /// * For an Application Load Balancer: arn:aws:elasticloadbalancing:region:account-id:loadbalancer/app/load-balancer-name/load-balancer-id + /// * For an Application Load Balancer: arn:partition:elasticloadbalancing:region:account-id:loadbalancer/app/load-balancer-name/load-balancer-id /// - /// * For an Amazon API Gateway REST API: arn:aws:apigateway:region::/restapis/api-id/stages/stage-name + /// * For an Amazon API Gateway REST API: arn:partition:apigateway:region::/restapis/api-id/stages/stage-name /// - /// * For an AppSync GraphQL API: arn:aws:appsync:region:account-id:apis/GraphQLApiId + /// * For an AppSync GraphQL API: arn:partition:appsync:region:account-id:apis/GraphQLApiId /// - /// * For an Amazon Cognito user pool: arn:aws:cognito-idp:region:account-id:userpool/user-pool-id + /// * For an Amazon Cognito user pool: arn:partition:cognito-idp:region:account-id:userpool/user-pool-id /// - /// * For an App Runner service: arn:aws:apprunner:region:account-id:service/apprunner-service-name/apprunner-service-id + /// * For an App Runner service: arn:partition:apprunner:region:account-id:service/apprunner-service-name/apprunner-service-id /// This member is required. public var resourceArn: Swift.String? @@ -6877,7 +6965,7 @@ public struct GetWebACLInput: Swift.Equatable { /// The name of the web ACL. You cannot change the name of a web ACL after you create it. /// This member is required. public var name: Swift.String? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -7772,7 +7860,7 @@ extension WAFV2ClientTypes { /// The parts of the JSON to match against using the MatchPattern. If you specify All, WAF matches against keys and values. /// This member is required. public var matchScope: WAFV2ClientTypes.JsonMatchScope? - /// What WAF should do if the body is larger than WAF can inspect. WAF does not support inspecting the entire contents of the body of a web request when the body exceeds 8 KB (8192 bytes). Only the first 8 KB of the request body are forwarded to WAF by the underlying host service. The options for oversize handling are the following: + /// What WAF should do if the body is larger than WAF can inspect. WAF does not support inspecting the entire contents of the web request body if the body exceeds the limit for the resource type. If the body is larger than the limit, the underlying host service only forwards the contents that are below the limit to WAF for inspection. The default limit is 8 KB (8,192 kilobytes) for regional resources and 16 KB (16,384 kilobytes) for CloudFront distributions. For CloudFront distributions, you can increase the limit in the web ACL AssociationConfig, for additional processing fees. The options for oversize handling are the following: /// /// * CONTINUE - Inspect the body normally, according to the rule inspection criteria. /// @@ -7781,7 +7869,7 @@ extension WAFV2ClientTypes { /// * NO_MATCH - Treat the web request as not matching the rule statement. /// /// - /// You can combine the MATCH or NO_MATCH settings for oversize handling with your rule and web ACL action settings, so that you block any request whose body is over 8 KB. Default: CONTINUE + /// You can combine the MATCH or NO_MATCH settings for oversize handling with your rule and web ACL action settings, so that you block any request whose body is over the limit. Default: CONTINUE public var oversizeHandling: WAFV2ClientTypes.OversizeHandling? public init ( @@ -8132,7 +8220,7 @@ public struct ListAvailableManagedRuleGroupVersionsInput: Swift.Equatable { public var name: Swift.String? /// When you request a list of objects with a Limit setting, if the number of objects that are still available for retrieval exceeds the limit, WAF returns a NextMarker value in the response. To retrieve the next batch of objects, provide the marker from the prior call in your next request. public var nextMarker: Swift.String? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -8321,7 +8409,7 @@ public struct ListAvailableManagedRuleGroupsInput: Swift.Equatable { public var limit: Swift.Int? /// When you request a list of objects with a Limit setting, if the number of objects that are still available for retrieval exceeds the limit, WAF returns a NextMarker value in the response. To retrieve the next batch of objects, provide the marker from the prior call in your next request. public var nextMarker: Swift.String? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -8483,7 +8571,7 @@ public struct ListIPSetsInput: Swift.Equatable { public var limit: Swift.Int? /// When you request a list of objects with a Limit setting, if the number of objects that are still available for retrieval exceeds the limit, WAF returns a NextMarker value in the response. To retrieve the next batch of objects, provide the marker from the prior call in your next request. public var nextMarker: Swift.String? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -8645,7 +8733,7 @@ public struct ListLoggingConfigurationsInput: Swift.Equatable { public var limit: Swift.Int? /// When you request a list of objects with a Limit setting, if the number of objects that are still available for retrieval exceeds the limit, WAF returns a NextMarker value in the response. To retrieve the next batch of objects, provide the marker from the prior call in your next request. public var nextMarker: Swift.String? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -8807,7 +8895,7 @@ public struct ListManagedRuleSetsInput: Swift.Equatable { public var limit: Swift.Int? /// When you request a list of objects with a Limit setting, if the number of objects that are still available for retrieval exceeds the limit, WAF returns a NextMarker value in the response. To retrieve the next batch of objects, provide the marker from the prior call in your next request. public var nextMarker: Swift.String? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -9127,7 +9215,7 @@ public struct ListRegexPatternSetsInput: Swift.Equatable { public var limit: Swift.Int? /// When you request a list of objects with a Limit setting, if the number of objects that are still available for retrieval exceeds the limit, WAF returns a NextMarker value in the response. To retrieve the next batch of objects, provide the marker from the prior call in your next request. public var nextMarker: Swift.String? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -9281,7 +9369,7 @@ extension ListResourcesForWebACLInput: ClientRuntime.URLPathProvider { } public struct ListResourcesForWebACLInput: Swift.Equatable { - /// Used for web ACLs that are scoped for regional applications. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. If you don't provide a resource type, the call uses the resource type APPLICATION_LOAD_BALANCER. Default: APPLICATION_LOAD_BALANCER + /// Used for web ACLs that are scoped for regional applications. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. If you don't provide a resource type, the call uses the resource type APPLICATION_LOAD_BALANCER. Default: APPLICATION_LOAD_BALANCER public var resourceType: WAFV2ClientTypes.ResourceType? /// The Amazon Resource Name (ARN) of the web ACL. /// This member is required. @@ -9427,7 +9515,7 @@ public struct ListRuleGroupsInput: Swift.Equatable { public var limit: Swift.Int? /// When you request a list of objects with a Limit setting, if the number of objects that are still available for retrieval exceeds the limit, WAF returns a NextMarker value in the response. To retrieve the next batch of objects, provide the marker from the prior call in your next request. public var nextMarker: Swift.String? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -9744,7 +9832,7 @@ public struct ListWebACLsInput: Swift.Equatable { public var limit: Swift.Int? /// When you request a list of objects with a Limit setting, if the number of objects that are still available for retrieval exceeds the limit, WAF returns a NextMarker value in the response. To retrieve the next batch of objects, provide the marker from the prior call in your next request. public var nextMarker: Swift.String? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -10630,7 +10718,7 @@ extension WAFV2ClientTypes { public struct ManagedRuleSetVersion: Swift.Equatable { /// The Amazon Resource Name (ARN) of the vendor rule group that's used to define the published version of your managed rule group. public var associatedRuleGroupArn: Swift.String? - /// The web ACL capacity units (WCUs) required for this rule group. WAF uses WCUs to calculate and control the operating resources that are used to run your rules, rule groups, and web ACLs. WAF calculates capacity differently for each rule type, to reflect the relative cost of each rule. Simple rules that cost little to run use fewer WCUs than more complex rules that use more processing power. Rule group capacity is fixed at creation, which helps users plan their web ACL WCU usage when they use a rule group. The WCU limit for web ACLs is 1,500. + /// The web ACL capacity units (WCUs) required for this rule group. WAF uses WCUs to calculate and control the operating resources that are used to run your rules, rule groups, and web ACLs. WAF calculates capacity differently for each rule type, to reflect the relative cost of each rule. Simple rules that cost little to run use fewer WCUs than more complex rules that use more processing power. Rule group capacity is fixed at creation, which helps users plan their web ACL WCU usage when they use a rule group. For more information, see [WAF web ACL capacity units (WCU)](https://docs.aws.amazon.com/waf/latest/developerguide/aws-waf-capacity-units.html) in the WAF Developer Guide. public var capacity: Swift.Int /// The time that this version is set to expire. Times are in Coordinated Universal Time (UTC) format. UTC format includes the special designator, Z. For example, "2016-09-27T14:50Z". public var expiryTimestamp: ClientRuntime.Date? @@ -10981,6 +11069,7 @@ extension WAFV2ClientTypes { public enum ParameterExceptionField: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case andStatement case associableResource + case associatedResourceType case atpRuleSetResponseInspection case bodyParsingFallbackBehavior case byteMatchStatement @@ -11051,6 +11140,7 @@ extension WAFV2ClientTypes { return [ .andStatement, .associableResource, + .associatedResourceType, .atpRuleSetResponseInspection, .bodyParsingFallbackBehavior, .byteMatchStatement, @@ -11126,6 +11216,7 @@ extension WAFV2ClientTypes { switch self { case .andStatement: return "AND_STATEMENT" case .associableResource: return "ASSOCIABLE_RESOURCE" + case .associatedResourceType: return "ASSOCIATED_RESOURCE_TYPE" case .atpRuleSetResponseInspection: return "ATP_RULE_SET_RESPONSE_INSPECTION" case .bodyParsingFallbackBehavior: return "BODY_PARSING_FALLBACK_BEHAVIOR" case .byteMatchStatement: return "BYTE_MATCH_STATEMENT" @@ -11521,7 +11612,7 @@ public struct PutManagedRuleSetVersionsInput: Swift.Equatable { public var name: Swift.String? /// The version of the named managed rule group that you'd like your customers to choose, from among your version offerings. public var recommendedVersion: Swift.String? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -11691,7 +11782,7 @@ extension PutPermissionPolicyInput: ClientRuntime.URLPathProvider { public struct PutPermissionPolicyInput: Swift.Equatable { /// The policy to attach to the specified rule group. The policy specifications must conform to the following: /// - /// * The policy must be composed using IAM Policy version 2012-10-17 or version 2015-01-01. + /// * The policy must be composed using IAM Policy version 2012-10-17. /// /// * The policy must include specifications for Effect, Action, and Principal. /// @@ -12346,6 +12437,42 @@ extension WAFV2ClientTypes { } +extension WAFV2ClientTypes.RequestBodyAssociatedResourceTypeConfig: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case defaultSizeInspectionLimit = "DefaultSizeInspectionLimit" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let defaultSizeInspectionLimit = self.defaultSizeInspectionLimit { + try encodeContainer.encode(defaultSizeInspectionLimit.rawValue, forKey: .defaultSizeInspectionLimit) + } + } + + public init (from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let defaultSizeInspectionLimitDecoded = try containerValues.decodeIfPresent(WAFV2ClientTypes.SizeInspectionLimit.self, forKey: .defaultSizeInspectionLimit) + defaultSizeInspectionLimit = defaultSizeInspectionLimitDecoded + } +} + +extension WAFV2ClientTypes { + /// Customizes the maximum size of the request body that your protected CloudFront distributions forward to WAF for inspection. The default size is 16 KB (16,384 kilobytes). You are charged additional fees when your protected resources forward body sizes that are larger than the default. For more information, see [WAF Pricing](http://aws.amazon.com/waf/pricing/). This is used in the AssociationConfig of the web ACL. + public struct RequestBodyAssociatedResourceTypeConfig: Swift.Equatable { + /// Specifies the maximum size of the web request body component that an associated CloudFront distribution should send to WAF for inspection. This applies to statements in the web ACL that inspect the body or JSON body. Default: 16 KB (16,384 kilobytes) + /// This member is required. + public var defaultSizeInspectionLimit: WAFV2ClientTypes.SizeInspectionLimit? + + public init ( + defaultSizeInspectionLimit: WAFV2ClientTypes.SizeInspectionLimit? = nil + ) + { + self.defaultSizeInspectionLimit = defaultSizeInspectionLimit + } + } + +} + extension WAFV2ClientTypes.RequestInspection: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case passwordField = "PasswordField" @@ -13262,12 +13389,12 @@ extension WAFV2ClientTypes { public var arn: Swift.String? /// The labels that one or more rules in this rule group add to matching web requests. These labels are defined in the RuleLabels for a [Rule]. public var availableLabels: [WAFV2ClientTypes.LabelSummary]? - /// The web ACL capacity units (WCUs) required for this rule group. When you create your own rule group, you define this, and you cannot change it after creation. When you add or modify the rules in a rule group, WAF enforces this limit. You can check the capacity for a set of rules using [CheckCapacity]. WAF uses WCUs to calculate and control the operating resources that are used to run your rules, rule groups, and web ACLs. WAF calculates capacity differently for each rule type, to reflect the relative cost of each rule. Simple rules that cost little to run use fewer WCUs than more complex rules that use more processing power. Rule group capacity is fixed at creation, which helps users plan their web ACL WCU usage when they use a rule group. The WCU limit for web ACLs is 1,500. + /// The web ACL capacity units (WCUs) required for this rule group. When you create your own rule group, you define this, and you cannot change it after creation. When you add or modify the rules in a rule group, WAF enforces this limit. You can check the capacity for a set of rules using [CheckCapacity]. WAF uses WCUs to calculate and control the operating resources that are used to run your rules, rule groups, and web ACLs. WAF calculates capacity differently for each rule type, to reflect the relative cost of each rule. Simple rules that cost little to run use fewer WCUs than more complex rules that use more processing power. Rule group capacity is fixed at creation, which helps users plan their web ACL WCU usage when they use a rule group. For more information, see [WAF web ACL capacity units (WCU)](https://docs.aws.amazon.com/waf/latest/developerguide/aws-waf-capacity-units.html) in the WAF Developer Guide. /// This member is required. public var capacity: Swift.Int /// The labels that one or more rules in this rule group match against in label match statements. These labels are defined in a LabelMatchStatement specification, in the [Statement] definition of a rule. public var consumedLabels: [WAFV2ClientTypes.LabelSummary]? - /// A map of custom response keys and content bodies. When you create a rule with a block action, you can send a custom response to the web request. You define these for the rule group, and then use them in the rules that you define in the rule group. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). For information about the limits on count and size for custom request and response settings, see [WAF quotas](https://docs.aws.amazon.com/waf/latest/developerguide/limits.html) in the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). + /// A map of custom response keys and content bodies. When you create a rule with a block action, you can send a custom response to the web request. You define these for the rule group, and then use them in the rules that you define in the rule group. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the WAF Developer Guide. For information about the limits on count and size for custom request and response settings, see [WAF quotas](https://docs.aws.amazon.com/waf/latest/developerguide/limits.html) in the WAF Developer Guide. public var customResponseBodies: [Swift.String:WAFV2ClientTypes.CustomResponseBody]? /// A description of the rule group that helps with identification. public var description: Swift.String? @@ -13866,7 +13993,7 @@ extension WAFV2ClientTypes.SizeConstraintStatement: Swift.Codable { } extension WAFV2ClientTypes { - /// A rule statement that compares a number of bytes against the size of a request component, using a comparison operator, such as greater than (>) or less than (<). For example, you can use a size constraint statement to look for query strings that are longer than 100 bytes. If you configure WAF to inspect the request body, WAF inspects only the first 8192 bytes (8 KB). If the request body for your web requests never exceeds 8192 bytes, you could use a size constraint statement to block requests that have a request body greater than 8192 bytes. If you choose URI for the value of Part of the request to filter on, the slash (/) in the URI counts as one character. For example, the URI /logo.jpg is nine characters long. + /// A rule statement that compares a number of bytes against the size of a request component, using a comparison operator, such as greater than (>) or less than (<). For example, you can use a size constraint statement to look for query strings that are longer than 100 bytes. If you configure WAF to inspect the request body, WAF inspects only the number of bytes of the body up to the limit for the web ACL. By default, for regional web ACLs, this limit is 8 KB (8,192 kilobytes) and for CloudFront web ACLs, this limit is 16 KB (16,384 kilobytes). For CloudFront web ACLs, you can increase the limit in the web ACL AssociationConfig, for additional fees. If you know that the request body for your web requests should never exceed the inspection limit, you could use a size constraint statement to block requests that have a larger request body size. If you choose URI for the value of Part of the request to filter on, the slash (/) in the URI counts as one character. For example, the URI /logo.jpg is nine characters long. public struct SizeConstraintStatement: Swift.Equatable { /// The operator to use to compare the request part to the size setting. /// This member is required. @@ -13897,6 +14024,44 @@ extension WAFV2ClientTypes { } +extension WAFV2ClientTypes { + public enum SizeInspectionLimit: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case kb16 + case kb32 + case kb48 + case kb64 + case sdkUnknown(Swift.String) + + public static var allCases: [SizeInspectionLimit] { + return [ + .kb16, + .kb32, + .kb48, + .kb64, + .sdkUnknown("") + ] + } + 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 .kb16: return "KB_16" + case .kb32: return "KB_32" + case .kb48: return "KB_48" + case .kb64: return "KB_64" + case let .sdkUnknown(s): return s + } + } + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = SizeInspectionLimit(rawValue: rawValue) ?? SizeInspectionLimit.sdkUnknown(rawValue) + } + } +} + extension WAFV2ClientTypes.SqliMatchStatement: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case fieldToMatch = "FieldToMatch" @@ -14110,7 +14275,7 @@ extension WAFV2ClientTypes { public var regexPatternSetReferenceStatement: WAFV2ClientTypes.RegexPatternSetReferenceStatement? /// A rule statement used to run the rules that are defined in a [RuleGroup]. To use this, create a rule group with your rules, then provide the ARN of the rule group in this statement. You cannot nest a RuleGroupReferenceStatement, for example for use inside a NotStatement or OrStatement. You can only use a rule group reference statement at the top level inside a web ACL. public var ruleGroupReferenceStatement: WAFV2ClientTypes.RuleGroupReferenceStatement? - /// A rule statement that compares a number of bytes against the size of a request component, using a comparison operator, such as greater than (>) or less than (<). For example, you can use a size constraint statement to look for query strings that are longer than 100 bytes. If you configure WAF to inspect the request body, WAF inspects only the first 8192 bytes (8 KB). If the request body for your web requests never exceeds 8192 bytes, you could use a size constraint statement to block requests that have a request body greater than 8192 bytes. If you choose URI for the value of Part of the request to filter on, the slash (/) in the URI counts as one character. For example, the URI /logo.jpg is nine characters long. + /// A rule statement that compares a number of bytes against the size of a request component, using a comparison operator, such as greater than (>) or less than (<). For example, you can use a size constraint statement to look for query strings that are longer than 100 bytes. If you configure WAF to inspect the request body, WAF inspects only the number of bytes of the body up to the limit for the web ACL. By default, for regional web ACLs, this limit is 8 KB (8,192 kilobytes) and for CloudFront web ACLs, this limit is 16 KB (16,384 kilobytes). For CloudFront web ACLs, you can increase the limit in the web ACL AssociationConfig, for additional fees. If you know that the request body for your web requests should never exceed the inspection limit, you could use a size constraint statement to block requests that have a larger request body size. If you choose URI for the value of Part of the request to filter on, the slash (/) in the URI counts as one character. For example, the URI /logo.jpg is nine characters long. public var sizeConstraintStatement: WAFV2ClientTypes.SizeConstraintStatement? /// A rule statement that inspects for malicious SQL code. Attackers insert malicious SQL code into web requests to do things like modify your database or extract data from it. public var sqliMatchStatement: WAFV2ClientTypes.SqliMatchStatement? @@ -14796,7 +14961,7 @@ public struct UpdateIPSetInput: Swift.Equatable { /// The name of the IP set. You cannot change the name of an IPSet after you create it. /// This member is required. public var name: Swift.String? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -14994,7 +15159,7 @@ public struct UpdateManagedRuleSetVersionExpiryDateInput: Swift.Equatable { /// The name of the managed rule set. You use this, along with the rule set ID, to identify the rule set. This name is assigned to the corresponding managed rule group, which your customers can access and use. /// This member is required. public var name: Swift.String? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -15207,7 +15372,7 @@ public struct UpdateRegexPatternSetInput: Swift.Equatable { /// /// This member is required. public var regularExpressionList: [WAFV2ClientTypes.Regex]? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -15407,7 +15572,7 @@ extension UpdateRuleGroupInput: ClientRuntime.URLPathProvider { } public struct UpdateRuleGroupInput: Swift.Equatable { - /// A map of custom response keys and content bodies. When you create a rule with a block action, you can send a custom response to the web request. You define these for the rule group, and then use them in the rules that you define in the rule group. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). For information about the limits on count and size for custom request and response settings, see [WAF quotas](https://docs.aws.amazon.com/waf/latest/developerguide/limits.html) in the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). + /// A map of custom response keys and content bodies. When you create a rule with a block action, you can send a custom response to the web request. You define these for the rule group, and then use them in the rules that you define in the rule group. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the WAF Developer Guide. For information about the limits on count and size for custom request and response settings, see [WAF quotas](https://docs.aws.amazon.com/waf/latest/developerguide/limits.html) in the WAF Developer Guide. public var customResponseBodies: [Swift.String:WAFV2ClientTypes.CustomResponseBody]? /// A description of the rule group that helps with identification. public var description: Swift.String? @@ -15422,7 +15587,7 @@ public struct UpdateRuleGroupInput: Swift.Equatable { public var name: Swift.String? /// The [Rule] statements used to identify the web requests that you want to allow, block, or count. Each rule includes one top-level statement that WAF uses to identify matching web requests, and parameters that govern how WAF handles them. public var rules: [WAFV2ClientTypes.Rule]? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -15600,6 +15765,7 @@ extension UpdateRuleGroupOutputResponseBody: Swift.Decodable { extension UpdateWebACLInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case associationConfig = "AssociationConfig" case captchaConfig = "CaptchaConfig" case challengeConfig = "ChallengeConfig" case customResponseBodies = "CustomResponseBodies" @@ -15616,6 +15782,9 @@ extension UpdateWebACLInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let associationConfig = self.associationConfig { + try encodeContainer.encode(associationConfig, forKey: .associationConfig) + } if let captchaConfig = self.captchaConfig { try encodeContainer.encode(captchaConfig, forKey: .captchaConfig) } @@ -15671,11 +15840,13 @@ extension UpdateWebACLInput: ClientRuntime.URLPathProvider { } public struct UpdateWebACLInput: Swift.Equatable { + /// Specifies custom configurations for the associations between the web ACL and protected resources. Use this to customize the maximum size of the request body that your protected CloudFront distributions forward to WAF for inspection. The default is 16 KB (16,384 kilobytes). You are charged additional fees when your protected resources forward body sizes that are larger than the default. For more information, see [WAF Pricing](http://aws.amazon.com/waf/pricing/). + public var associationConfig: WAFV2ClientTypes.AssociationConfig? /// Specifies how WAF should handle CAPTCHA evaluations for rules that don't have their own CaptchaConfig settings. If you don't specify this, WAF uses its default settings for CaptchaConfig. public var captchaConfig: WAFV2ClientTypes.CaptchaConfig? /// Specifies how WAF should handle challenge evaluations for rules that don't have their own ChallengeConfig settings. If you don't specify this, WAF uses its default settings for ChallengeConfig. public var challengeConfig: WAFV2ClientTypes.ChallengeConfig? - /// A map of custom response keys and content bodies. When you create a rule with a block action, you can send a custom response to the web request. You define these for the web ACL, and then use them in the rules and default actions that you define in the web ACL. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). For information about the limits on count and size for custom request and response settings, see [WAF quotas](https://docs.aws.amazon.com/waf/latest/developerguide/limits.html) in the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). + /// A map of custom response keys and content bodies. When you create a rule with a block action, you can send a custom response to the web request. You define these for the web ACL, and then use them in the rules and default actions that you define in the web ACL. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the WAF Developer Guide. For information about the limits on count and size for custom request and response settings, see [WAF quotas](https://docs.aws.amazon.com/waf/latest/developerguide/limits.html) in the WAF Developer Guide. public var customResponseBodies: [Swift.String:WAFV2ClientTypes.CustomResponseBody]? /// The action to perform if none of the Rules contained in the WebACL match. /// This member is required. @@ -15693,7 +15864,7 @@ public struct UpdateWebACLInput: Swift.Equatable { public var name: Swift.String? /// The [Rule] statements used to identify the web requests that you want to allow, block, or count. Each rule includes one top-level statement that WAF uses to identify matching web requests, and parameters that govern how WAF handles them. public var rules: [WAFV2ClientTypes.Rule]? - /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, a Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: + /// Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: /// /// * CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1. /// @@ -15707,6 +15878,7 @@ public struct UpdateWebACLInput: Swift.Equatable { public var visibilityConfig: WAFV2ClientTypes.VisibilityConfig? public init ( + associationConfig: WAFV2ClientTypes.AssociationConfig? = nil, captchaConfig: WAFV2ClientTypes.CaptchaConfig? = nil, challengeConfig: WAFV2ClientTypes.ChallengeConfig? = nil, customResponseBodies: [Swift.String:WAFV2ClientTypes.CustomResponseBody]? = nil, @@ -15721,6 +15893,7 @@ public struct UpdateWebACLInput: Swift.Equatable { visibilityConfig: WAFV2ClientTypes.VisibilityConfig? = nil ) { + self.associationConfig = associationConfig self.captchaConfig = captchaConfig self.challengeConfig = challengeConfig self.customResponseBodies = customResponseBodies @@ -15749,10 +15922,12 @@ struct UpdateWebACLInputBody: Swift.Equatable { let captchaConfig: WAFV2ClientTypes.CaptchaConfig? let challengeConfig: WAFV2ClientTypes.ChallengeConfig? let tokenDomains: [Swift.String]? + let associationConfig: WAFV2ClientTypes.AssociationConfig? } extension UpdateWebACLInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case associationConfig = "AssociationConfig" case captchaConfig = "CaptchaConfig" case challengeConfig = "ChallengeConfig" case customResponseBodies = "CustomResponseBodies" @@ -15820,6 +15995,8 @@ extension UpdateWebACLInputBody: Swift.Decodable { } } tokenDomains = tokenDomainsDecoded0 + let associationConfigDecoded = try containerValues.decodeIfPresent(WAFV2ClientTypes.AssociationConfig.self, forKey: .associationConfig) + associationConfig = associationConfigDecoded } } @@ -16043,7 +16220,7 @@ extension WAFV2ClientTypes.VisibilityConfig: Swift.Codable { extension WAFV2ClientTypes { /// Defines and enables Amazon CloudWatch metrics and web request sample collection. public struct VisibilityConfig: Swift.Equatable { - /// A boolean indicating whether the associated resource sends metrics to Amazon CloudWatch. For the list of available metrics, see [WAF Metrics](https://docs.aws.amazon.com/waf/latest/developerguide/monitoring-cloudwatch.html#waf-metrics). + /// A boolean indicating whether the associated resource sends metrics to Amazon CloudWatch. For the list of available metrics, see [WAF Metrics](https://docs.aws.amazon.com/waf/latest/developerguide/monitoring-cloudwatch.html#waf-metrics) in the WAF Developer Guide. /// This member is required. public var cloudWatchMetricsEnabled: Swift.Bool /// A name of the Amazon CloudWatch metric dimension. The name can contain only the characters: A-Z, a-z, 0-9, - (hyphen), and _ (underscore). The name can be from one to 128 characters long. It can't contain whitespace or metric names that are reserved for WAF, for example All and Default_Action. @@ -16488,7 +16665,7 @@ extension WAFInvalidPermissionPolicyException { /// The operation failed because the specified policy isn't in the proper format. The policy specifications must conform to the following: /// -/// * The policy must be composed using IAM Policy version 2012-10-17 or version 2015-01-01. +/// * The policy must be composed using IAM Policy version 2012-10-17. /// /// * The policy must include specifications for Effect, Action, and Principal. /// @@ -17057,6 +17234,7 @@ extension WAFUnavailableEntityExceptionBody: Swift.Decodable { extension WAFV2ClientTypes.WebACL: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case arn = "ARN" + case associationConfig = "AssociationConfig" case capacity = "Capacity" case captchaConfig = "CaptchaConfig" case challengeConfig = "ChallengeConfig" @@ -17079,6 +17257,9 @@ extension WAFV2ClientTypes.WebACL: Swift.Codable { if let arn = self.arn { try encodeContainer.encode(arn, forKey: .arn) } + if let associationConfig = self.associationConfig { + try encodeContainer.encode(associationConfig, forKey: .associationConfig) + } if capacity != 0 { try encodeContainer.encode(capacity, forKey: .capacity) } @@ -17220,22 +17401,26 @@ extension WAFV2ClientTypes.WebACL: Swift.Codable { } } tokenDomains = tokenDomainsDecoded0 + let associationConfigDecoded = try containerValues.decodeIfPresent(WAFV2ClientTypes.AssociationConfig.self, forKey: .associationConfig) + associationConfig = associationConfigDecoded } } extension WAFV2ClientTypes { - /// A web ACL defines a collection of rules to use to inspect and control web requests. Each rule has an action defined (allow, block, or count) for requests that match the statement of the rule. In the web ACL, you assign a default action to take (allow, block) for any request that does not match any of the rules. The rules in a web ACL can be a combination of the types [Rule], [RuleGroup], and managed rule group. You can associate a web ACL with one or more Amazon Web Services resources to protect. The resources can be an Amazon CloudFront distribution, an Amazon API Gateway REST API, an Application Load Balancer, an AppSync GraphQL API, Amazon Cognito user pool, or an App Runner service. + /// A web ACL defines a collection of rules to use to inspect and control web requests. Each rule has an action defined (allow, block, or count) for requests that match the statement of the rule. In the web ACL, you assign a default action to take (allow, block) for any request that does not match any of the rules. The rules in a web ACL can be a combination of the types [Rule], [RuleGroup], and managed rule group. You can associate a web ACL with one or more Amazon Web Services resources to protect. The resources can be an Amazon CloudFront distribution, an Amazon API Gateway REST API, an Application Load Balancer, an AppSync GraphQL API, an Amazon Cognito user pool, or an App Runner service. public struct WebACL: Swift.Equatable { /// The Amazon Resource Name (ARN) of the web ACL that you want to associate with the resource. /// This member is required. public var arn: Swift.String? - /// The web ACL capacity units (WCUs) currently being used by this web ACL. WAF uses WCUs to calculate and control the operating resources that are used to run your rules, rule groups, and web ACLs. WAF calculates capacity differently for each rule type, to reflect the relative cost of each rule. Simple rules that cost little to run use fewer WCUs than more complex rules that use more processing power. Rule group capacity is fixed at creation, which helps users plan their web ACL WCU usage when they use a rule group. The WCU limit for web ACLs is 1,500. + /// Specifies custom configurations for the associations between the web ACL and protected resources. Use this to customize the maximum size of the request body that your protected CloudFront distributions forward to WAF for inspection. The default is 16 KB (16,384 kilobytes). You are charged additional fees when your protected resources forward body sizes that are larger than the default. For more information, see [WAF Pricing](http://aws.amazon.com/waf/pricing/). + public var associationConfig: WAFV2ClientTypes.AssociationConfig? + /// The web ACL capacity units (WCUs) currently being used by this web ACL. WAF uses WCUs to calculate and control the operating resources that are used to run your rules, rule groups, and web ACLs. WAF calculates capacity differently for each rule type, to reflect the relative cost of each rule. Simple rules that cost little to run use fewer WCUs than more complex rules that use more processing power. Rule group capacity is fixed at creation, which helps users plan their web ACL WCU usage when they use a rule group. For more information, see [WAF web ACL capacity units (WCU)](https://docs.aws.amazon.com/waf/latest/developerguide/aws-waf-capacity-units.html) in the WAF Developer Guide. public var capacity: Swift.Int /// Specifies how WAF should handle CAPTCHA evaluations for rules that don't have their own CaptchaConfig settings. If you don't specify this, WAF uses its default settings for CaptchaConfig. public var captchaConfig: WAFV2ClientTypes.CaptchaConfig? /// Specifies how WAF should handle challenge evaluations for rules that don't have their own ChallengeConfig settings. If you don't specify this, WAF uses its default settings for ChallengeConfig. public var challengeConfig: WAFV2ClientTypes.ChallengeConfig? - /// A map of custom response keys and content bodies. When you create a rule with a block action, you can send a custom response to the web request. You define these for the web ACL, and then use them in the rules and default actions that you define in the web ACL. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). For information about the limits on count and size for custom request and response settings, see [WAF quotas](https://docs.aws.amazon.com/waf/latest/developerguide/limits.html) in the [WAF Developer Guide](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html). + /// A map of custom response keys and content bodies. When you create a rule with a block action, you can send a custom response to the web request. You define these for the web ACL, and then use them in the rules and default actions that you define in the web ACL. For information about customizing web requests and responses, see [Customizing web requests and responses in WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) in the WAF Developer Guide. For information about the limits on count and size for custom request and response settings, see [WAF quotas](https://docs.aws.amazon.com/waf/latest/developerguide/limits.html) in the WAF Developer Guide. public var customResponseBodies: [Swift.String:WAFV2ClientTypes.CustomResponseBody]? /// The action to perform if none of the Rules contained in the WebACL match. /// This member is required. @@ -17270,6 +17455,7 @@ extension WAFV2ClientTypes { public init ( arn: Swift.String? = nil, + associationConfig: WAFV2ClientTypes.AssociationConfig? = nil, capacity: Swift.Int = 0, captchaConfig: WAFV2ClientTypes.CaptchaConfig? = nil, challengeConfig: WAFV2ClientTypes.ChallengeConfig? = nil, @@ -17288,6 +17474,7 @@ extension WAFV2ClientTypes { ) { self.arn = arn + self.associationConfig = associationConfig self.capacity = capacity self.captchaConfig = captchaConfig self.challengeConfig = challengeConfig diff --git a/Tests/Services/AWSAccountTests/EndpointResolverTest.swift b/Tests/Services/AWSAccountTests/EndpointResolverTest.swift index e01c0a7530d..bd6a38eb225 100644 --- a/Tests/Services/AWSAccountTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSAccountTests/EndpointResolverTest.swift @@ -29,8 +29,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "account" + "signingName": "account", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -117,8 +117,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "account" + "signingName": "account", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -145,8 +145,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "cn-northwest-1", - "signingName": "account" + "signingName": "account", + "signingRegion": "cn-northwest-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -233,8 +233,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "cn-northwest-1", - "signingName": "account" + "signingName": "account", + "signingRegion": "cn-northwest-1" ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/Tests/Services/AWSBillingconductorTests/EndpointResolverTest.swift b/Tests/Services/AWSBillingconductorTests/EndpointResolverTest.swift index 58a411dccc1..3726841dbe0 100644 --- a/Tests/Services/AWSBillingconductorTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSBillingconductorTests/EndpointResolverTest.swift @@ -29,8 +29,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "billingconductor" + "signingName": "billingconductor", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -117,8 +117,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "billingconductor" + "signingName": "billingconductor", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/Tests/Services/AWSBudgetsTests/EndpointResolverTest.swift b/Tests/Services/AWSBudgetsTests/EndpointResolverTest.swift index ef9e3db6eeb..675877e04bf 100644 --- a/Tests/Services/AWSBudgetsTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSBudgetsTests/EndpointResolverTest.swift @@ -29,8 +29,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "budgets" + "signingName": "budgets", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -117,8 +117,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "budgets" + "signingName": "budgets", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -145,8 +145,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "cn-northwest-1", - "signingName": "budgets" + "signingName": "budgets", + "signingRegion": "cn-northwest-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -233,8 +233,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "cn-northwest-1", - "signingName": "budgets" + "signingName": "budgets", + "signingRegion": "cn-northwest-1" ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/Tests/Services/AWSChimeTests/EndpointResolverTest.swift b/Tests/Services/AWSChimeTests/EndpointResolverTest.swift index 763d0dd2c00..ac0460612dc 100644 --- a/Tests/Services/AWSChimeTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSChimeTests/EndpointResolverTest.swift @@ -29,8 +29,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "chime" + "signingName": "chime", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -117,8 +117,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "chime" + "signingName": "chime", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/Tests/Services/AWSCloudFrontTests/EndpointResolverTest.swift b/Tests/Services/AWSCloudFrontTests/EndpointResolverTest.swift index 71b4f4cc2b8..bba09ce47f3 100644 --- a/Tests/Services/AWSCloudFrontTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSCloudFrontTests/EndpointResolverTest.swift @@ -29,8 +29,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "cloudfront" + "signingName": "cloudfront", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -57,8 +57,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "cloudfront" + "signingName": "cloudfront", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -105,8 +105,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "cloudfront" + "signingName": "cloudfront", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -153,8 +153,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "cloudfront" + "signingName": "cloudfront", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -181,8 +181,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "cn-northwest-1", - "signingName": "cloudfront" + "signingName": "cloudfront", + "signingRegion": "cn-northwest-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -269,8 +269,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "cn-northwest-1", - "signingName": "cloudfront" + "signingName": "cloudfront", + "signingRegion": "cn-northwest-1" ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/Tests/Services/AWSCostExplorerTests/EndpointResolverTest.swift b/Tests/Services/AWSCostExplorerTests/EndpointResolverTest.swift index fe9f37837f9..e40e80ad0f9 100644 --- a/Tests/Services/AWSCostExplorerTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSCostExplorerTests/EndpointResolverTest.swift @@ -29,8 +29,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "ce" + "signingName": "ce", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -117,8 +117,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "ce" + "signingName": "ce", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -145,8 +145,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "cn-northwest-1", - "signingName": "ce" + "signingName": "ce", + "signingRegion": "cn-northwest-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -233,8 +233,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "cn-northwest-1", - "signingName": "ce" + "signingName": "ce", + "signingRegion": "cn-northwest-1" ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/Tests/Services/AWSDynamoDBStreamsTests/EndpointResolverTest.swift b/Tests/Services/AWSDynamoDBStreamsTests/EndpointResolverTest.swift index d990a26b026..aea25356dc2 100644 --- a/Tests/Services/AWSDynamoDBStreamsTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSDynamoDBStreamsTests/EndpointResolverTest.swift @@ -349,8 +349,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "dynamodb" + "signingName": "dynamodb", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/Tests/Services/AWSDynamoDBTests/EndpointResolverTest.swift b/Tests/Services/AWSDynamoDBTests/EndpointResolverTest.swift index b28f85891ec..dea128f9047 100644 --- a/Tests/Services/AWSDynamoDBTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSDynamoDBTests/EndpointResolverTest.swift @@ -369,8 +369,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "dynamodb" + "signingName": "dynamodb", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/Tests/Services/AWSEventBridgeTests/EndpointResolverTest.swift b/Tests/Services/AWSEventBridgeTests/EndpointResolverTest.swift index 04b714f66d1..7ebb1fb4622 100644 --- a/Tests/Services/AWSEventBridgeTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSEventBridgeTests/EndpointResolverTest.swift @@ -1082,11 +1082,11 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ + "signingName": "events", "name": "sigv4a", "signingRegionSet": [ "*" - ] as [AnyHashable], - "signingName": "events" + ] as [AnyHashable] ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1193,11 +1193,11 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ + "signingName": "events", "name": "sigv4a", "signingRegionSet": [ "*" - ] as [AnyHashable], - "signingName": "events" + ] as [AnyHashable] ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1225,11 +1225,11 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ + "signingName": "events", "name": "sigv4a", "signingRegionSet": [ "*" - ] as [AnyHashable], - "signingName": "events" + ] as [AnyHashable] ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/Tests/Services/AWSGreengrassTests/EndpointResolverTest.swift b/Tests/Services/AWSGreengrassTests/EndpointResolverTest.swift index 49b5291284d..c3203c13d2f 100644 --- a/Tests/Services/AWSGreengrassTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSGreengrassTests/EndpointResolverTest.swift @@ -409,8 +409,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-gov-east-1", - "signingName": "greengrass" + "signingName": "greengrass", + "signingRegion": "us-gov-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -437,8 +437,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-gov-west-1", - "signingName": "greengrass" + "signingName": "greengrass", + "signingRegion": "us-gov-west-1" ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/Tests/Services/AWSGreengrassV2Tests/EndpointResolverTest.swift b/Tests/Services/AWSGreengrassV2Tests/EndpointResolverTest.swift index 8300bc3cc24..f8b8046b4af 100644 --- a/Tests/Services/AWSGreengrassV2Tests/EndpointResolverTest.swift +++ b/Tests/Services/AWSGreengrassV2Tests/EndpointResolverTest.swift @@ -409,8 +409,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-gov-east-1", - "signingName": "greengrass" + "signingName": "greengrass", + "signingRegion": "us-gov-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -437,8 +437,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-gov-west-1", - "signingName": "greengrass" + "signingName": "greengrass", + "signingRegion": "us-gov-west-1" ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/Tests/Services/AWSHealthTests/EndpointResolverTest.swift b/Tests/Services/AWSHealthTests/EndpointResolverTest.swift index f0cf2cff853..cefc403e2d1 100644 --- a/Tests/Services/AWSHealthTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSHealthTests/EndpointResolverTest.swift @@ -29,8 +29,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "health" + "signingName": "health", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -117,8 +117,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "health" + "signingName": "health", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -145,8 +145,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "cn-northwest-1", - "signingName": "health" + "signingName": "health", + "signingRegion": "cn-northwest-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -233,8 +233,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "cn-northwest-1", - "signingName": "health" + "signingName": "health", + "signingRegion": "cn-northwest-1" ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/Tests/Services/AWSIAMTests/EndpointResolverTest.swift b/Tests/Services/AWSIAMTests/EndpointResolverTest.swift index faf63403387..9c7d24180e6 100644 --- a/Tests/Services/AWSIAMTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSIAMTests/EndpointResolverTest.swift @@ -29,8 +29,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "iam" + "signingName": "iam", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -57,8 +57,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "iam" + "signingName": "iam", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -105,8 +105,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "iam" + "signingName": "iam", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -153,8 +153,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "iam" + "signingName": "iam", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -181,8 +181,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "cn-north-1", - "signingName": "iam" + "signingName": "iam", + "signingRegion": "cn-north-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -269,8 +269,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "cn-north-1", - "signingName": "iam" + "signingName": "iam", + "signingRegion": "cn-north-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -297,8 +297,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-gov-west-1", - "signingName": "iam" + "signingName": "iam", + "signingRegion": "us-gov-west-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -325,8 +325,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-gov-west-1", - "signingName": "iam" + "signingName": "iam", + "signingRegion": "us-gov-west-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -373,8 +373,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-gov-west-1", - "signingName": "iam" + "signingName": "iam", + "signingRegion": "us-gov-west-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -421,8 +421,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-gov-west-1", - "signingName": "iam" + "signingName": "iam", + "signingRegion": "us-gov-west-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -449,8 +449,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-iso-east-1", - "signingName": "iam" + "signingName": "iam", + "signingRegion": "us-iso-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -535,8 +535,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-iso-east-1", - "signingName": "iam" + "signingName": "iam", + "signingRegion": "us-iso-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -563,8 +563,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-isob-east-1", - "signingName": "iam" + "signingName": "iam", + "signingRegion": "us-isob-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -649,8 +649,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-isob-east-1", - "signingName": "iam" + "signingName": "iam", + "signingRegion": "us-isob-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/Tests/Services/AWSMemoryDBTests/EndpointResolverTest.swift b/Tests/Services/AWSMemoryDBTests/EndpointResolverTest.swift index 2c32ece9149..34ae76978f1 100644 --- a/Tests/Services/AWSMemoryDBTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSMemoryDBTests/EndpointResolverTest.swift @@ -249,8 +249,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-west-1", - "signingName": "memorydb" + "signingName": "memorydb", + "signingRegion": "us-west-1" ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/Tests/Services/AWSNetworkManagerTests/EndpointResolverTest.swift b/Tests/Services/AWSNetworkManagerTests/EndpointResolverTest.swift index 7fa55435c8a..772edec9eab 100644 --- a/Tests/Services/AWSNetworkManagerTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSNetworkManagerTests/EndpointResolverTest.swift @@ -29,8 +29,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-west-2", - "signingName": "networkmanager" + "signingName": "networkmanager", + "signingRegion": "us-west-2" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -117,8 +117,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-west-2", - "signingName": "networkmanager" + "signingName": "networkmanager", + "signingRegion": "us-west-2" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -225,8 +225,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-gov-west-1", - "signingName": "networkmanager" + "signingName": "networkmanager", + "signingRegion": "us-gov-west-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -313,8 +313,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-gov-west-1", - "signingName": "networkmanager" + "signingName": "networkmanager", + "signingRegion": "us-gov-west-1" ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/Tests/Services/AWSOrganizationsTests/EndpointResolverTest.swift b/Tests/Services/AWSOrganizationsTests/EndpointResolverTest.swift index b968f8fdf15..531e2c8336b 100644 --- a/Tests/Services/AWSOrganizationsTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSOrganizationsTests/EndpointResolverTest.swift @@ -29,8 +29,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "organizations" + "signingName": "organizations", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -57,8 +57,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "organizations" + "signingName": "organizations", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -105,8 +105,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "organizations" + "signingName": "organizations", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -153,8 +153,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "organizations" + "signingName": "organizations", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -181,8 +181,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "cn-northwest-1", - "signingName": "organizations" + "signingName": "organizations", + "signingRegion": "cn-northwest-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -269,8 +269,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "cn-northwest-1", - "signingName": "organizations" + "signingName": "organizations", + "signingRegion": "cn-northwest-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -297,8 +297,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-gov-west-1", - "signingName": "organizations" + "signingName": "organizations", + "signingRegion": "us-gov-west-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -325,8 +325,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-gov-west-1", - "signingName": "organizations" + "signingName": "organizations", + "signingRegion": "us-gov-west-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -373,8 +373,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-gov-west-1", - "signingName": "organizations" + "signingName": "organizations", + "signingRegion": "us-gov-west-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -421,8 +421,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-gov-west-1", - "signingName": "organizations" + "signingName": "organizations", + "signingRegion": "us-gov-west-1" ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/Tests/Services/AWSRoute53RecoveryControlConfigTests/EndpointResolverTest.swift b/Tests/Services/AWSRoute53RecoveryControlConfigTests/EndpointResolverTest.swift index 1af12c16979..2ba68d5a13f 100644 --- a/Tests/Services/AWSRoute53RecoveryControlConfigTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSRoute53RecoveryControlConfigTests/EndpointResolverTest.swift @@ -29,8 +29,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-west-2", - "signingName": "route53-recovery-control-config" + "signingName": "route53-recovery-control-config", + "signingRegion": "us-west-2" ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/Tests/Services/AWSRoute53Tests/EndpointResolverTest.swift b/Tests/Services/AWSRoute53Tests/EndpointResolverTest.swift index 60e6ddcb9f0..e5f3e215e4a 100644 --- a/Tests/Services/AWSRoute53Tests/EndpointResolverTest.swift +++ b/Tests/Services/AWSRoute53Tests/EndpointResolverTest.swift @@ -29,8 +29,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "route53" + "signingName": "route53", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -57,8 +57,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "route53" + "signingName": "route53", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -105,8 +105,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "route53" + "signingName": "route53", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -153,8 +153,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "route53" + "signingName": "route53", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -181,8 +181,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "cn-northwest-1", - "signingName": "route53" + "signingName": "route53", + "signingRegion": "cn-northwest-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -269,8 +269,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "cn-northwest-1", - "signingName": "route53" + "signingName": "route53", + "signingRegion": "cn-northwest-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -297,8 +297,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-gov-west-1", - "signingName": "route53" + "signingName": "route53", + "signingRegion": "us-gov-west-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -325,8 +325,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-gov-west-1", - "signingName": "route53" + "signingName": "route53", + "signingRegion": "us-gov-west-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -373,8 +373,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-gov-west-1", - "signingName": "route53" + "signingName": "route53", + "signingRegion": "us-gov-west-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -421,8 +421,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-gov-west-1", - "signingName": "route53" + "signingName": "route53", + "signingRegion": "us-gov-west-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -449,8 +449,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-iso-east-1", - "signingName": "route53" + "signingName": "route53", + "signingRegion": "us-iso-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -535,8 +535,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-iso-east-1", - "signingName": "route53" + "signingName": "route53", + "signingRegion": "us-iso-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -563,8 +563,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-isob-east-1", - "signingName": "route53" + "signingName": "route53", + "signingRegion": "us-isob-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -649,8 +649,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-isob-east-1", - "signingName": "route53" + "signingName": "route53", + "signingRegion": "us-isob-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/Tests/Services/AWSS3ControlTests/EndpointResolverTest.swift b/Tests/Services/AWSS3ControlTests/EndpointResolverTest.swift index f60971f8bc0..a72e2cfb73d 100644 --- a/Tests/Services/AWSS3ControlTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSS3ControlTests/EndpointResolverTest.swift @@ -32,9 +32,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -66,9 +66,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -100,9 +100,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -134,9 +134,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "cn-north-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -168,9 +168,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -202,9 +202,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -236,9 +236,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-gov-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -270,9 +270,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "cn-north-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -304,9 +304,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "cn-north-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -338,9 +338,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-gov-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -372,9 +372,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "af-south-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -406,9 +406,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "af-south-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -440,9 +440,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-gov-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -474,9 +474,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-east-2", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -506,9 +506,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-east-2", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -537,9 +537,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -569,9 +569,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-east-2", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -600,9 +600,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -632,9 +632,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-east-2", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -794,9 +794,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -827,9 +827,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -885,9 +885,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -918,9 +918,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -997,9 +997,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1029,9 +1029,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1064,9 +1064,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-east-2", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1097,9 +1097,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-east-2", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1130,9 +1130,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-east-2", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1206,9 +1206,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1239,9 +1239,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1272,9 +1272,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-gov-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1305,9 +1305,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-gov-west-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1338,9 +1338,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-east-2", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1392,9 +1392,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "cn-north-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1425,9 +1425,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1458,9 +1458,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-gov-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1491,9 +1491,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-gov-west-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1524,9 +1524,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-east-2", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1578,9 +1578,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "af-south-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1611,9 +1611,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1644,9 +1644,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-gov-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1677,9 +1677,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-gov-west-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1710,9 +1710,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-east-2", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1848,9 +1848,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1879,9 +1879,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1910,9 +1910,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1941,9 +1941,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1968,9 +1968,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1996,9 +1996,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2024,9 +2024,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2053,9 +2053,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2080,9 +2080,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "cn-north-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2130,9 +2130,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2182,9 +2182,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2213,9 +2213,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2243,9 +2243,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2331,9 +2331,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2360,9 +2360,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2389,9 +2389,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2418,9 +2418,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2590,9 +2590,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2622,9 +2622,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2787,9 +2787,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2865,9 +2865,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2898,9 +2898,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2999,9 +2999,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/Tests/Services/AWSS3Tests/EndpointResolverTest.swift b/Tests/Services/AWSS3Tests/EndpointResolverTest.swift index 83950bfd407..f922bc5bd08 100644 --- a/Tests/Services/AWSS3Tests/EndpointResolverTest.swift +++ b/Tests/Services/AWSS3Tests/EndpointResolverTest.swift @@ -157,9 +157,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -299,9 +299,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -331,9 +331,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -366,8 +366,8 @@ class EndpointResolverTest: XCTestCase { "signingRegionSet": [ "*" ] as [AnyHashable], - "disableDoubleEncoding": true, - "signingName": "s3" + "signingName": "s3", + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -485,9 +485,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -561,9 +561,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -614,9 +614,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -645,9 +645,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -677,9 +677,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "af-south-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -709,9 +709,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "af-south-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -741,9 +741,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "af-south-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -795,9 +795,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "af-south-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -850,9 +850,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -883,9 +883,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -911,9 +911,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", + "signingName": "s3", "disableDoubleEncoding": true, - "signingName": "s3" + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -939,9 +939,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", + "signingName": "s3", "disableDoubleEncoding": true, - "signingName": "s3" + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -967,9 +967,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", + "signingName": "s3", "disableDoubleEncoding": true, - "signingName": "s3" + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -995,9 +995,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", + "signingName": "s3", "disableDoubleEncoding": true, - "signingName": "s3" + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1024,9 +1024,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", + "signingName": "s3", "disableDoubleEncoding": true, - "signingName": "s3" + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1072,9 +1072,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1103,9 +1103,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1134,9 +1134,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "cn-north-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1165,9 +1165,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1196,9 +1196,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1227,9 +1227,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1259,9 +1259,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1291,9 +1291,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1322,9 +1322,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1352,9 +1352,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1382,9 +1382,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1412,9 +1412,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1442,9 +1442,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1472,9 +1472,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1504,9 +1504,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1535,9 +1535,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1566,9 +1566,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1597,9 +1597,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1628,9 +1628,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1659,9 +1659,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1691,9 +1691,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1723,9 +1723,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1755,9 +1755,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1787,9 +1787,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1819,9 +1819,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1851,9 +1851,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1884,9 +1884,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1916,9 +1916,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1947,10 +1947,10 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ + "signingName": "s3", "signingRegion": "us-east-1", - "name": "sigv4", "disableDoubleEncoding": true, - "signingName": "s3" + "name": "sigv4" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1980,9 +1980,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2013,9 +2013,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2046,9 +2046,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2079,9 +2079,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2112,9 +2112,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2146,9 +2146,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2178,9 +2178,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2225,9 +2225,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2257,9 +2257,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2289,9 +2289,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2321,9 +2321,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2353,9 +2353,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2385,9 +2385,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2417,9 +2417,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2449,9 +2449,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2503,9 +2503,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "cn-north-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2535,9 +2535,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "cn-north-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2611,9 +2611,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "af-south-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2643,9 +2643,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "af-south-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2675,9 +2675,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "af-south-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2707,9 +2707,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "af-south-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2739,9 +2739,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "af-south-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2771,9 +2771,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "af-south-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2825,9 +2825,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2855,10 +2855,10 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ + "signingName": "s3", "signingRegion": "us-gov-west-1", - "name": "sigv4", "disableDoubleEncoding": true, - "signingName": "s3" + "name": "sigv4" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2910,9 +2910,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2964,9 +2964,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -2995,9 +2995,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -3027,9 +3027,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "cn-north-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -3058,10 +3058,10 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ + "signingName": "s3", "signingRegion": "cn-north-1", - "name": "sigv4", "disableDoubleEncoding": true, - "signingName": "s3" + "name": "sigv4" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -3113,9 +3113,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "cn-north-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -3167,9 +3167,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "cn-north-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -3198,9 +3198,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "cn-north-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -3230,9 +3230,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "af-south-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -3261,10 +3261,10 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ + "signingName": "s3", "signingRegion": "af-south-1", - "name": "sigv4", "disableDoubleEncoding": true, - "signingName": "s3" + "name": "sigv4" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -3316,9 +3316,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "af-south-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -3370,9 +3370,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "af-south-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -3401,9 +3401,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "af-south-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -3434,9 +3434,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -3467,9 +3467,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -3569,9 +3569,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -3602,9 +3602,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "cn-north-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -3635,9 +3635,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "cn-north-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -3737,9 +3737,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "cn-north-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -3770,9 +3770,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "af-south-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -3803,9 +3803,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "af-south-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -3905,9 +3905,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "af-south-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -3937,9 +3937,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -3969,9 +3969,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -4023,9 +4023,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -4055,9 +4055,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "cn-north-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -4153,9 +4153,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "af-south-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -4185,9 +4185,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "af-south-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -4239,9 +4239,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3", "signingRegion": "af-south-1", - "disableDoubleEncoding": true, - "signingName": "s3" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -4270,9 +4270,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -4302,9 +4302,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -4382,9 +4382,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -4414,9 +4414,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -4469,9 +4469,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -4585,9 +4585,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-object-lambda", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-object-lambda" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -4617,9 +4617,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-object-lambda", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3-object-lambda" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -4649,9 +4649,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-object-lambda", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3-object-lambda" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -4681,9 +4681,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-object-lambda", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-object-lambda" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -4713,9 +4713,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-object-lambda", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-object-lambda" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -4767,9 +4767,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-object-lambda", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-object-lambda" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -4865,9 +4865,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-object-lambda", "signingRegion": "us-gov-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-object-lambda" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -4897,9 +4897,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-object-lambda", "signingRegion": "us-gov-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-object-lambda" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -5172,9 +5172,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-object-lambda", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3-object-lambda" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -5226,9 +5226,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-object-lambda", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3-object-lambda" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -5258,9 +5258,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-object-lambda", "signingRegion": "us-west-2", - "disableDoubleEncoding": true, - "signingName": "s3-object-lambda" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -5289,9 +5289,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-object-lambda", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-object-lambda" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -5320,9 +5320,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-object-lambda", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-object-lambda" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -5435,9 +5435,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east.special", + "signingName": "s3-object-lambda", "disableDoubleEncoding": true, - "signingName": "s3-object-lambda" + "signingRegion": "us-east.special" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -5466,9 +5466,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-west-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -5497,9 +5497,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "ap-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -5528,9 +5528,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -5559,9 +5559,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "me-south-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -5591,9 +5591,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -5623,9 +5623,9 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", + "signingName": "s3-outposts", "signingRegion": "us-east-1", - "disableDoubleEncoding": true, - "signingName": "s3-outposts" + "disableDoubleEncoding": true ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/Tests/Services/AWSSTSTests/EndpointResolverTest.swift b/Tests/Services/AWSSTSTests/EndpointResolverTest.swift index 4c3f0837b97..ff2eb1fd4e9 100644 --- a/Tests/Services/AWSSTSTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSSTSTests/EndpointResolverTest.swift @@ -209,8 +209,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "sts" + "signingName": "sts", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1110,9 +1110,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ + "signingName": "sts", "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "sts" + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1139,9 +1139,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ + "signingName": "sts", "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "sts" + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1168,9 +1168,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ + "signingName": "sts", "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "sts" + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1197,9 +1197,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ + "signingName": "sts", "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "sts" + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1226,9 +1226,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ + "signingName": "sts", "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "sts" + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1255,9 +1255,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ + "signingName": "sts", "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "sts" + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1284,9 +1284,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ + "signingName": "sts", "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "sts" + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1313,9 +1313,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ + "signingName": "sts", "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "sts" + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1342,9 +1342,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ + "signingName": "sts", "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "sts" + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1371,9 +1371,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ + "signingName": "sts", "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "sts" + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1400,9 +1400,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ + "signingName": "sts", "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "sts" + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1429,9 +1429,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ + "signingName": "sts", "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "sts" + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1458,9 +1458,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ + "signingName": "sts", "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "sts" + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1487,9 +1487,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ + "signingName": "sts", "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "sts" + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1516,9 +1516,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ + "signingName": "sts", "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "sts" + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1545,9 +1545,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ + "signingName": "sts", "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "sts" + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1574,9 +1574,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ + "signingName": "sts", "name": "sigv4", - "signingRegion": "us-east-3", - "signingName": "sts" + "signingRegion": "us-east-3" ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/Tests/Services/AWSSavingsplansTests/EndpointResolverTest.swift b/Tests/Services/AWSSavingsplansTests/EndpointResolverTest.swift index 7857740f1bf..6e4ece52d41 100644 --- a/Tests/Services/AWSSavingsplansTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSSavingsplansTests/EndpointResolverTest.swift @@ -29,8 +29,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "savingsplans" + "signingName": "savingsplans", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -117,8 +117,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "savingsplans" + "signingName": "savingsplans", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/Tests/Services/AWSShieldTests/EndpointResolverTest.swift b/Tests/Services/AWSShieldTests/EndpointResolverTest.swift index 588216b5bd2..e98dc076556 100644 --- a/Tests/Services/AWSShieldTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSShieldTests/EndpointResolverTest.swift @@ -29,8 +29,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "shield" + "signingName": "shield", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -57,8 +57,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "shield" + "signingName": "shield", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -105,8 +105,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "shield" + "signingName": "shield", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -153,8 +153,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "shield" + "signingName": "shield", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/Tests/Services/AWSSupportTests/EndpointResolverTest.swift b/Tests/Services/AWSSupportTests/EndpointResolverTest.swift index bd69c70db19..75cda0a388d 100644 --- a/Tests/Services/AWSSupportTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSSupportTests/EndpointResolverTest.swift @@ -29,8 +29,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "support" + "signingName": "support", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -117,8 +117,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "support" + "signingName": "support", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -145,8 +145,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "cn-north-1", - "signingName": "support" + "signingName": "support", + "signingRegion": "cn-north-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -233,8 +233,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "cn-north-1", - "signingName": "support" + "signingName": "support", + "signingRegion": "cn-north-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -261,8 +261,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-gov-west-1", - "signingName": "support" + "signingName": "support", + "signingRegion": "us-gov-west-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -349,8 +349,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-gov-west-1", - "signingName": "support" + "signingName": "support", + "signingRegion": "us-gov-west-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -377,8 +377,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-iso-east-1", - "signingName": "support" + "signingName": "support", + "signingRegion": "us-iso-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -463,8 +463,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-iso-east-1", - "signingName": "support" + "signingName": "support", + "signingRegion": "us-iso-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -491,8 +491,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-isob-east-1", - "signingName": "support" + "signingName": "support", + "signingRegion": "us-isob-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -577,8 +577,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-isob-east-1", - "signingName": "support" + "signingName": "support", + "signingRegion": "us-isob-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/Tests/Services/AWSWAFTests/EndpointResolverTest.swift b/Tests/Services/AWSWAFTests/EndpointResolverTest.swift index 30470358228..63f6810503d 100644 --- a/Tests/Services/AWSWAFTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSWAFTests/EndpointResolverTest.swift @@ -29,8 +29,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "waf" + "signingName": "waf", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -57,8 +57,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "waf" + "signingName": "waf", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -105,8 +105,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "waf" + "signingName": "waf", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -153,8 +153,8 @@ class EndpointResolverTest: XCTestCase { "authSchemes": [ [ "name": "sigv4", - "signingRegion": "us-east-1", - "signingName": "waf" + "signingName": "waf", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/packageDependencies.plist b/packageDependencies.plist index 13821bc660c..cafc569099a 100644 --- a/packageDependencies.plist +++ b/packageDependencies.plist @@ -2,13 +2,13 @@ - clientRuntimeVersion - 0.17.0 + awsCRTSwiftBranch + main awsCRTSwiftVersion 0.9.0 clientRuntimeBranch main - awsCRTSwiftBranch - main + clientRuntimeVersion + 0.18.0